我有一个法语文件夹树。当我阅读它的文件夹/文件时,它返回 é 而不是 é。我替换了字符,但这不是一个好的解决方案。我怎样才能解决这个问题 ?我在谷歌上找到了一些答案,但它对我没有帮助。
谢谢!
我有一个法语文件夹树。当我阅读它的文件夹/文件时,它返回 é 而不是 é。我替换了字符,但这不是一个好的解决方案。我怎样才能解决这个问题 ?我在谷歌上找到了一些答案,但它对我没有帮助。
谢谢!
启动应用程序时,将编码设置为 utf-8:
java -Dfile.encoding="UTF-8" YourMainClass
请注意,正如上面链接中提到的,许多 Java 类缓存了编码;因此,如果您在运行时更改编码,它可能不会影响我们关注的所有类。
一个
\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}
。
您正面临编码问题。
任何字符串实际上都是一组位。为了使它们可读,我们使用位组到我们可以阅读的字符表示的映射。这些“地图”代表所谓的编码。
您遇到的问题是因为您读取使用一个“地图”编码的位并使用另一个“地图”显示它。
请务必使用相同的编码,并始终检查您的字符串操作函数是否适用于正在使用的编码。它是您的应用程序正常工作的基础。
这通常发生在您没有以正确的编码格式(可能是 UTF-8)解码文本时。
如果您想要更准确的答案,请将您的代码发布给我们,以便我们尝试更正它。
代码显示了正确的位——错误是你用来查看这些位的东西被告知这些位的编码与实际不同。
这不是 Java 问题。这是您用来查看 Java 输出的任何软件的问题。例如,您的终端编码可能设置为 ISO-8859-15,而不是 Java 发出的 UTF-8。
为外部世界提供一个全 UTF-8 的工作流程和一个由抽象 Unicode 代码点组成的内部世界确实很有帮助。
我想您可能误读了某些输入,即 UTF-8 格式的输入,但您误读为某些传统的 8 位编码。但我最好的猜测是已经给出的那个,你的显示设备/程序的编码设置错误。
我已经使用下面的代码将é
java unicode 打印到文件正在工作
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();