Java 字符°;txt文件的编码与可视化

Java 字符°;txt文件的编码与可视化,java,encoding,character,Java,Encoding,Character,我在表中有一个字段,其中包含字符串“Address Pippo p.2°”。 我的程序读取该值并将其写入txt文件,但输出为: “地址Pippo p.2°”(不需要) 我有一个问题,因为txt文件是一个位置文件 我使用以下Java指令打开文件: FileWriter fw=新的FileWriter(文件,true); pw=新的打印书写器(fw) 我想写没有奇怪字符的字符串 有什么帮助吗 提前感谢尝试将字符串编码为UTF-8,如下所示 File file = new File("D://

我在表中有一个字段,其中包含字符串“Address Pippo p.2°”。 我的程序读取该值并将其写入txt文件,但输出为:

“地址Pippo p.2°”(不需要)

我有一个问题,因为txt文件是一个位置文件

我使用以下Java指令打开文件: FileWriter fw=新的FileWriter(文件,true); pw=新的打印书写器(fw)

我想写没有奇怪字符的字符串

有什么帮助吗


提前感谢

尝试将字符串编码为UTF-8,如下所示

    File file = new File("D://test.txt");
    FileWriter fw = new FileWriter(file, true);
    PrintWriter pw = new PrintWriter(fw);
    String test = "Address Pippo p.2 °";
    ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(test);
    test = StandardCharsets.UTF_8.decode(byteBuffer).toString();
    pw.write(test);
    pw.close();

尝试像这样将字符串编码为UTF-8

    File file = new File("D://test.txt");
    FileWriter fw = new FileWriter(file, true);
    PrintWriter pw = new PrintWriter(fw);
    String test = "Address Pippo p.2 °";
    ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(test);
    test = StandardCharsets.UTF_8.decode(byteBuffer).toString();
    pw.write(test);
    pw.close();

Java使用Unicode。将文本写入文件时,将使用特定字符编码对其进行编码。如果您没有明确指定它,它将使用“系统默认编码”,这是为您的特定JVM实例配置为默认的编码。您需要知道写入文件时使用的编码。然后,您需要使用相同的编码来读取和显示文件内容。您看到的有趣字符可能是由于使用UTF-8写入文件,然后尝试使用Windows-1252(“ANSI”)编码在记事本中读取和显示文件

决定你想要什么编码,并在阅读和写作时都坚持使用它。要使用Windows-1252进行写入,请使用:

Writer w = new OutputStreamWriter(new FileInputStream(file, true), "windows-1252");
如果你用UTF-8写,告诉记事本你想让它用UTF-8读文件。一种方法是在文件开头写入字符“\uFEFF”(字节顺序标记)


如果使用UTF-8,请注意非ASCII字符将使后续字节偏离位置。因此,例如,如果电话字段必须始终从字节位置200开始,那么在使电话字段从字节位置201或202开始之前,在地址字段中具有非ASCII字符。使用windows-1252编码不会出现此问题,但该编码无法对所有Unicode字符进行编码。

Java使用Unicode。将文本写入文件时,将使用特定字符编码对其进行编码。如果您没有明确指定它,它将使用“系统默认编码”,这是为您的特定JVM实例配置为默认的编码。您需要知道写入文件时使用的编码。然后,您需要使用相同的编码来读取和显示文件内容。您看到的有趣字符可能是由于使用UTF-8写入文件,然后尝试使用Windows-1252(“ANSI”)编码在记事本中读取和显示文件

决定你想要什么编码,并在阅读和写作时都坚持使用它。要使用Windows-1252进行写入,请使用:

Writer w = new OutputStreamWriter(new FileInputStream(file, true), "windows-1252");
如果你用UTF-8写,告诉记事本你想让它用UTF-8读文件。一种方法是在文件开头写入字符“\uFEFF”(字节顺序标记)


如果使用UTF-8,请注意非ASCII字符将使后续字节偏离位置。因此,例如,如果电话字段必须始终从字节位置200开始,那么在使电话字段从字节位置201或202开始之前,在地址字段中具有非ASCII字符。使用windows-1252编码不会出现此问题,但该编码无法对所有Unicode字符进行编码。

什么是“txt文件是位置文件”?您不是使用用于写入它的字符编码来读取它,因此。什么是“txt文件是位置文件”?您没有使用用于编写它的字符编码来读取它,因此。它可以工作,但我没有找到原因。现在没关系,谢谢你,但我想不起原因。现在还可以,感谢“为您的特定JVM实例配置为默认值的内容”:这是最重要的一句话。它因系统、用户和时间而异。这可能正是我们想要的,但很少有人会这么做。“为您的特定JVM实例配置为默认值的内容”是最关键的一句话。它因系统、用户和时间而异。它可能正是人们想要的,但很少。