Java UTF-8奇怪的行为

Eri*_*las 5 java utf-8

我试图用Java解码一些UTF-8字符串.这些字符串包含一些组合的unicode字符,例如CC 88(组合diaresis).根据http://www.fileformat.info/info/unicode/char/0308/index.htm,字符序列似乎没问题.

但转换为String后的输出无效.任何的想法 ?

byte[] utf8 = { 105, -52, -120 };
System.out.print("{{");
for(int i = 0; i < utf8.length; ++i)
{
    int value = utf8[i] & 0xFF;
    System.out.print(Integer.toHexString(value));
}
System.out.println("}}");
System.out.println(">" + new String(utf8, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

输出:

    {{69cc88}}
    >i?

ska*_*man 9

您输出的控制台(例如Windows)可能不支持unicode,并且可能会破坏字符.控制台输出不是数据的良好表示.

尝试将输出写入文件,确保FileWriter上的编码正确,然后在unicode友好编辑器中打开文件.

或者,使用调试器确保字符符合您的预期.只是不要相信控制台.


Eri*_*las 5

下面是我在 Windows 上的 Eclipse 中最终解决问题的方法:

\n
    \n
  1. 单击运行配置
  2. \n
  3. 单击参数选项卡。
  4. \n
  5. 添加-Dfile.encoding=UTF-8
  6. \n
  7. 单击“常用”选项卡。
  8. \n
  9. 控制台编码设置为UTF-8.
  10. \n
\n

修改代码:

\n
byte[] utf8 = { 105, -52, -120 };\nSystem.out.print("{{");\nfor(int i = 0; i < utf8.length; ++i)\n{\n    int value = utf8[i] & 0xFF;\n    System.out.print(Integer.toHexString(value));\n}\nSystem.out.println("}}");\n\nPrintStream sysout = new PrintStream(System.out, true, "UTF-8");\nsysout.print(">" + new String(utf8, "UTF-8"));\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
{{69cc88}}\n> \xc3\xaf\n
Run Code Online (Sandbox Code Playgroud)\n