关于unicode:Java – é变成??

Java - é becomes ?? - How to fix it

本问题已经有最佳答案,请猛点这里访问。

我有一个法语文件夹树。当我阅读它的文件夹/文件时,它会返回吗??而不是_。我替换了这个角色,但这不是一个好的解决方案。我怎么修这个?我在谷歌上找到了一些答案,但这对我没有帮助。

谢谢!


启动应用程序时,将编码设置为UTF-8:

1
java -Dfile.encoding="UTF-8" YourMainClass

注意,正如上面链接中提到的,许多Java类缓存了编码;因此,如果在运行时更改编码,它可能不会影响我们关心的所有类。

在他对另一个问题的回答中抄袭了tchrist的解释:

A
{LATIN SMALL LETTER E WITH ACUTE}
character is code point U+00E9.
In UTF-8, that is \xC3\xA9.

But if you turn around and treat those two bytes as distinct code
points U+00C3 and U+00A9, those are
{LATIN CAPITAL LETTER A WITH
TILDE}
and
{COPYRIGHT SIGN}
, respectively.


您面临编码问题。

任何字符串实际上都是一组位。为了使它们可读,我们使用位组到我们可以读取的字符表示的映射。这些"映射"表示所谓的编码。

你所面临的问题是,你读取使用一个"map"编码的位,并使用另一个"map"显示它。

请确保使用相同的编码,并始终检查字符串操作函数是否与所使用的编码一起工作。它是正确处理应用程序的基础。


我使用下面的代码来打印EDOCX1×0的Java Unicode文件正在工作。

1
2
3
4
5
6
writer1 = new FileWriter(outputFile, true);
writer2 = new BufferedWriter(writer1);
String str = new String(stringBuffer.toString().getBytes(), **"ISO-8859-1"**);
writer2.write(str);
writer1.flush();
writer2.flush();

代码显示的是正确的位-错误的是,用来查看这些位的东西被告知这些位的编码与实际的不同。

这不是Java问题。无论使用什么软件来查看Java输出,这都是一个问题。例如,您的终端编码可以设置为ISO-85915,而不是Java发出的UTF-8。

对于外部世界来说,拥有一个全UTF-8工作流和一个抽象的Unicode代码点的内部世界真的很有帮助。

我想可能是您误读了一些输入,这些输入是以UTF-8格式输入的,但是您误读了一些传统的8位编码。但我的最佳猜测是,你的显示设备/程序编码设置错误。


这通常发生在您没有以正确的编码格式(可能是UTF-8)解码文本时。

如果你想要更精确的答案,请把你的代码发给我们,这样我们可以尝试更正它。