Java - é becomes ?? - How to fix it
我有一个法语文件夹树。当我阅读它的文件夹/文件时,它会返回吗??而不是_。我替换了这个角色,但这不是一个好的解决方案。我怎么修这个?我在谷歌上找到了一些答案,但这对我没有帮助。
谢谢!
启动应用程序时,将编码设置为UTF-8:
1 | java -Dfile.encoding="UTF-8" YourMainClass |
注意,正如上面链接中提到的,许多Java类缓存了编码;因此,如果在运行时更改编码,它可能不会影响我们关心的所有类。
在他对另一个问题的回答中抄袭了tchrist的解释:
A
character is code point
{LATIN SMALL LETTER E WITH ACUTE}U+00E9 .
In UTF-8, that is\xC3\xA9 .But if you turn around and treat those two bytes as distinct code
pointsU+00C3 andU+00A9 , those areand
{LATIN CAPITAL LETTER A WITH
TILDE}, respectively.
{COPYRIGHT SIGN}
您面临编码问题。
任何字符串实际上都是一组位。为了使它们可读,我们使用位组到我们可以读取的字符表示的映射。这些"映射"表示所谓的编码。
你所面临的问题是,你读取使用一个"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)解码文本时。
如果你想要更精确的答案,请把你的代码发给我们,这样我们可以尝试更正它。