0

嗨,我有一个小功能,可以将字节打印为印地语,该印地语存储为 Unicode。我的功能就像

public static void byteArrayToPrintableHindi(byte[] iData) {

    String value = "";
    String unicode = "\\u";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < iData.length; i++) {
        if (i % 2 == 0) {

            value = value.concat(unicode.concat(String.format("%02X", iData[i])));
            sb.append(String.format("%02X", iData[i]));
        } else {
            value = value.concat(String.format("%02X", iData[i]));
        }
    }
    System.out.println("value = "+value);
    System.out.println("\u091A\u0941\u0921\u093C\u093E\u092E\u0923\u093F");

} 

输出是

value = \u091A\u0941\u0921\u093C\u093E\u092E\u0923\u093F
चुड़ामणि

我期待打印的价值

चुड़ामणि

我不知道为什么它没有打印所需的输出。

4

1 回答 1

4

您误解了\uXXXX转义码的工作原理。当 Java 编译器读取您的源代码时,它会解释这些转义码并将它们转换为 Unicode 字符。您不能在运行时构建由\uXXXX代码组成的字符串并期望 Java 自动将其转换为 Unicode 字符——这不是它的工作方式。它仅适用于源代码中的文字\uXXXX代码。

你可以简单地这样做:

public static void byteArrayToPrintableHindi(byte[] iData) throws UnsupportedEncodingException {
    String value = new String(iData, "UTF-16");

    System.out.println("value = "+value);
    System.out.println("\u091A\u0941\u0921\u093C\u093E\u092E\u0923\u093F");
}

假设数据是 UTF-16 编码的。

于 2014-03-28T08:07:59.180 回答