字节数组到印地语Unicode值

时间:2014-03-28 07:45:11

标签: java string unicode hindi

嗨我有一个小函数,它将字节打印到印地语,存储为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
चुड़ामणि

我期待打印的价值

चुड़ामणि

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

1 个答案:

答案 0 :(得分: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编码的。