我有一个法语文件夹树。当我正在阅读它的文件夹/文件时,它会返回é而不是é。我替换了角色,但这不是一个好的解决方案。我怎样才能解决这个问题 ? 我在谷歌上找到了一些答案,但它对我没有帮助。
谢谢!
答案 0 :(得分:3)
启动应用程序时,set the encoding to utf-8:
java -Dfile.encoding="UTF-8" YourMainClass
请注意,如上面的链接所述,许多Java类缓存编码;因此,如果您在运行时更改编码,它可能不会影响我们所关注的所有类。
将tchrist中的his answer的解释复制到another question:
\N{LATIN SMALL LETTER E WITH ACUTE}
个字符是代码点U+00E9
。 在UTF-8中,即\xC3\xA9
。但是,如果你转过身来将这两个字节视为不同的代码 分
U+00C3
和U+00A9
分别为\N{LATIN CAPITAL LETTER A WITH TILDE}
和\N{COPYRIGHT SIGN}
。
答案 1 :(得分:2)
您正面临编码问题。
任何字符串实际上都是一组位。为了使它们可读,我们使用位组的映射到我们可以读取的字符表示。那些“地图”代表所谓的编码。
您遇到的问题是因为您阅读使用一个“地图”编码的位并使用另一个“地图”显示它。
请务必使用相同的编码,并始终检查字符串操作函数是否与正在使用的编码一起使用。它是您正确使用应用程序的基础。
答案 2 :(得分:0)
这通常会在您没有以正确的编码格式(可能是UTF-8)解码文本时发生。
如果您想要更准确的答案,请将您的代码发给我们,以便我们尝试纠正它。
答案 3 :(得分:0)
代码显示正确的位 - 错误的是你用来查看这些位的东西被告知这些位的编码与实际不同。
这不是Java问题。无论您使用什么软件查看Java输出,这都是一个问题。例如,您的终端编码可能设置为ISO-8859-15而不是Java正在发出的UTF-8。
为外部世界提供全UTF-8工作流程以及抽象Unicode代码点的内部世界确实很有帮助。
我想你可能误读了一些输入,输入是UTF-8,但你误读的是一些传统的8位编码。但我最好的猜测是已经给出的,你的显示设备/程序的编码是错误的。
答案 4 :(得分:0)
我使用下面的代码打印é
java unicode to file is working
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();