3

我有一个法语文件夹树。当我阅读它的文件夹/文件时,它返回 é 而不是 é。我替换了字符,但这不是一个好的解决方案。我怎样才能解决这个问题 ?我在谷歌上找到了一些答案,但它对我没有帮助。

谢谢!

4

5 回答 5

3

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

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

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

在他对另一个问题的回答中复制tchrist的解释:

一个\N{LATIN SMALL LETTER E WITH ACUTE}字符是代码点U+00E9。在 UTF-8 中,即\xC3\xA9.

但是,如果您转身将这两个字节视为不同的代码点U+00C3U+00A9,它们分别是\N{LATIN CAPITAL LETTER A WITH TILDE}\N{COPYRIGHT SIGN}

于 2013-04-25T09:18:00.580 回答
2

您正面临编码问题。

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

您遇到的问题是因为您读取使用一个“地图”编码的位并使用另一个“地图”显示它。

请务必使用相同的编码,并始终检查您的字符串操作函数是否适用于正在使用的编码。它是您的应用程序正常工作的基础。

于 2013-04-25T07:17:46.800 回答
0

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

如果您想要更准确的答案,请将您的代码发布给我们,以便我们尝试更正它。

于 2013-04-25T07:16:27.463 回答
0

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

这不是 Java 问题。这是您用来查看 Java 输出的任何软件的问题。例如,您的终端编码可能设置为 ISO-8859-15,而不是 Java 发出的 UTF-8。

为外部世界提供一个全 UTF-8 的工作流程和一个由抽象 Unicode 代码点组成的内部世界确实很有帮助。

我想您可能误读了某些输入,即 UTF-8 格式的输入,但您误读为某些传统的 8 位编码。但我最好的猜测是已经给出的那个,你的显示设备/程序的编码设置错误。

于 2013-04-27T15:20:46.337 回答
0

我已经使用下面的代码将é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();
于 2017-01-20T07:35:35.760 回答