getBytes() 对于重音字符的问题

Shw*_*kar 3 java encoding utf-8

我正在尝试将带有 \xc3\x89 等特殊字符的字符串转换为带有 UTF-8 编码的字符串。我尝试这样做:

\n\n
String str = "MARIE-H\xc3\x89L\xc3\x88NE";\nbyte sByte[] = str.getBytes("UTF-8"); \nstr = new String(sByte,"UTF-8");\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是,当我这样做时"\xc3\x89".getBytes("UTF-8"),我得到 63,当它被转换为新字符串时,它被解释为“?”。我该如何解决这个问题?

\n\n

编辑:我还注意到这个问题在 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]

\n

Tak*_*aki 5

当有关源文件编码的信息未正确提供给编译器 (javac) 时,就会发生这种错误。如果源文件的编码是 UTF-8,请按如下方式编译文件。

\n\n
javac -encoding UTF-8 E.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

下面是源文件编码为UTF-16 Big Endian情况的另一个例子。

\n\n
javac -encoding UTF-16BE E.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经确认下面的程序正确显示“0xC3 0x89”。所以,你的代码没有问题。

\n\n
public 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}\n
Run Code Online (Sandbox Code Playgroud)\n