有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

unicode Javaé成为©如何修复它

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

谢谢


共 (5) 个答案

  1. # 1 楼答案

    您正面临编码问题

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

    您遇到的问题是,您正在读取使用一个“映射”编码的位,并使用另一个“映射”显示它

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

  2. # 2 楼答案

    当您没有以正确的编码格式(可能是UTF-8)解码文本时,通常会发生这种情况

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

  3. # 3 楼答案

    我已经使用下面的代码将é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();
    
  4. # 4 楼答案

    启动应用程序时,set the encoding to utf-8

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

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

    将解释从his answer中的tchrist复制到another question

    A \N{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 \N{LATIN CAPITAL LETTER A WITH TILDE} and \N{COPYRIGHT SIGN}, respectively.

  5. # 5 楼答案

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

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

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

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