Shw*_*kar 3 java encoding utf-8
我正在尝试将带有 \xc3\x89 等特殊字符的字符串转换为带有 UTF-8 编码的字符串。我尝试这样做:
\n\nString str = "MARIE-H\xc3\x89L\xc3\x88NE";\nbyte sByte[] = str.getBytes("UTF-8"); \nstr = new String(sByte,"UTF-8");\nRun Code Online (Sandbox Code Playgroud)\n\n问题是,当我这样做时"\xc3\x89".getBytes("UTF-8"),我得到 63,当它被转换为新字符串时,它被解释为“?”。我该如何解决这个问题?
编辑:我还注意到这个问题在 Eclipse 上无法重现,可能是因为文本文件编码通常设置为 UTF-8。
\n\n我尝试byte[] str = "MARIE-H\xc3\x89L\xc3\x88NE".getBytes("UTF-8")在http://www.javarepl.com/console.html中进行操作并得到结果byte[] str = [77, 65, 82, 73, 69, 45, 72, 63, 76, 63, 78, 69]
当有关源文件编码的信息未正确提供给编译器 (javac) 时,就会发生这种错误。如果源文件的编码是 UTF-8,请按如下方式编译文件。
\n\njavac -encoding UTF-8 E.java\nRun Code Online (Sandbox Code Playgroud)\n\n下面是源文件编码为UTF-16 Big Endian情况的另一个例子。
\n\njavac -encoding UTF-16BE E.java\nRun Code Online (Sandbox Code Playgroud)\n\n我已经确认下面的程序正确显示“0xC3 0x89”。所以,你的代码没有问题。
\n\npublic class E\n{\n public static void main(String[] args) throws Exception\n {\n byte[] bytes = "\xc3\x89".getBytes("UTF-8");\n\n for (int i = 0; i < bytes.length; ++i)\n {\n System.out.format("0x%02X ", (byte)(bytes[i]));\n }\n\n System.out.println();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |