【问题标题】:Converting UTF-16BE to UTF-8 in Java ME在 Java ME 中将 UTF-16BE 转换为 UTF-8
【发布时间】:2021-11-20 08:08:10
【问题描述】:

我正在用 Java ME 为旧的 Symbian 设备(而不仅仅是它们)编写一个应用程序。我有个问题。我正在尝试使用 png 图像绘制表情符号。它们存储在某个服务器上的 2 个文件夹中。第一个文件夹在 2017 年后不包含新的表情符号,我必须更改我的代码。 猜测文件名的旧代码:

Integer.toHexString((int) text.toCharArray()[ii-1]).toUpperCase()+Integer.toHexString((int) text.toCharArray()[ii]).toUpperCase()+".png"

这有助于我转换 ????具有 2 个符号的整数代码的表情符号 55356 57147D83CDF3B.png 现在我需要得到 f09f8cbb.png 来自同一个表情符号。 网站 https://unicode-table.com/en/1F33B/ 表示 UTF-8 F0 9F 8C BB 和 UTF-16BE D8 3C DF 3B 是一样的。如何从 UTF16BE 转换为 UTF-8 ?我在网上找到的所有代码都是用 C 或 Javascript 编写的,不适合我。 在 StackOverflow 上,我也找到了这段代码

try {
    // Convert from Unicode to UTF-8
    String string = "\u003c";
    byte[] utf8 = string.getBytes("UTF-8");

    // Convert from UTF-8 to Unicode
    string = new String(utf8, "UTF-8");
} catch (UnsupportedEncodingException e) {
}

但它返回的字符串与我给它的字符串相同。

【问题讨论】:

  • "但它返回的字符串与我给它的字符串相同。"是的,因为您要的是 UTF-8 字节,然后从 UTF-8 字节构造一个字符串。
  • @AndyTurner 不过,这里提供此代码作为答案stackoverflow.com/questions/9075603/…

标签: java utf-8 java-me utf-16


【解决方案1】:

这在 Java ME 中帮助了我,符合 Java 1.3。

static String bytesToHex(byte[] bytes) {
        final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = HEX_ARRAY[v >>> 4];
            hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
        }
        return new String(hexChars);
    }
    

String HexOfString(String str) {
   byte[] utfString = str.getBytes("UTF-8");
   return bytesToHex(utfString);
}

从? emoji 我得到“F09F8CBB”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 2014-10-28
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2012-02-22
    • 2015-09-21
    相关资源
    最近更新 更多