【问题标题】:Save txt-file in Java with the right charset to get the €-sign使用正确的字符集在 Java 中保存 txt 文件以获取欧元符号
【发布时间】:2021-02-06 10:43:42
【问题描述】:

我想保存一个 java 生成的 txt 文件。我是这样做的:

StringBuilder builder = new StringBuilder();
for(int i = 0; i < row; i++){
   for(int j = 0; j < col; j++) {
      builder.append(Satz[i][j]+"");
      if(j < col - 1)
         builder.append(";");
   }
   builder.append("\n");
}
System.out.println("builder");
System.out.println(builder);
BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new FileWriter(path));
    //writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "UTF-8"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        writer.write(builder.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我尝试了被注释掉的版本 (OutputStreamWriter),但也没有用。

所以问题是,在保存 txt 文件之前,代码 System.out.println(builder); 给了我字符串 is 的样子。这里看起来像这样:

von 24,5 mio€ (vorjahr: bereinigt 11,4 mio€)

在 txt 文件中,如下所示:

24,5 mio€ (vorjahr: bereinigt 11,4 mio€) 

我做错了什么?有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 在字节级别上,文件 in 的实际内容是什么,而不是它看起来 的样子?后者受任何显示内容的控制 - 特别是,它是否知道内容是 UTF-8 编码的?
  • 可能有许多不同的配置错误导致您描述的问题。因此,有几个问题有助于分析:查看文本文件时您使用的工具(记事本/编辑器/其他)是什么?您的 Java 平台默认编码是什么 (System.getProperty("file.encoding"))?是"€".length()==1

标签: java character-encoding text-files symbols


【解决方案1】:

从你看到的字符来看,最可能的设定是:

您的 Java 编辑器和编译器设置为使用一致的编码,可能(但不一定)UTF-8。

当您运行 Java 程序时,默认编码似乎是 UTF-8。你可以用System.getProperty("file.encoding")检查它,你会得到一个根据UTF-8规则对其字符进行编码的文件,其中欧元符号导致三个字节E2 82 AC

查看文件时,您使用的是采用 Windows CP-1252 编码的编辑器(可能是标准的 Windows 编辑器应用程序 NOTEPAD.EXE?)。在 CP-1252 中,每个字符只占用一个字节。然后,编辑器将三个字节 E2 82 AC(表示欧元符号)视为三个单个字符 €

谁来阅读文件?

  • 如果它是一个类似于您的 Java 程序,您可以放心地忽略某些 Windows 编辑器显示无意义的事实(或者您可以从编辑器打开文件并指定 UTF-8 编码,例如在打开对话框中)。

  • 如果是西欧典型机器上的 Windows 编辑器,它将采用 CP1252 编码。所以你应该专门用那种编码来写你的文件:

      writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "CP1252"));
    

无论如何,生成文件的程序和稍后读取文件的应用程序应该首先就通用字符编码达成一致(无论是 CP1252、UTF-8 还是其他)。否则,你会看到像上面这样无意义的结果。

【讨论】:

    【解决方案2】:

    默认情况下,编写器以UTF-8 格式存储您的字符串。当您使用设置为 UTF-8 的文本编辑器(例如 Notepad++)打开存储的文本文件时,您应该会看到相同的字符串。请注意,即使在以其他格式查看文本文件时特殊字符看起来不正确,文件中的数据仍然是正确的,并且可以被您的应用程序读取以重新获取存储的字符串。

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 2014-10-23
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2020-05-17
      • 2013-12-04
      相关资源
      最近更新 更多