Excel / Java / Json的编码问题(德语Umlaut)

时间:2019-04-05 00:55:20

标签: java json excel utf-8 apache-poi

我有一个用Java编写的小程序,可以从.xlsx文件中读取内容并将其中一些内容写入新的.json文件中。 在.xlsx单元格中,有一些带有德国Umlauts的字符串(“ä,ö,ü”)。

我的问题:
如果程序在MacOS上运行,则一切正常。
如果程序在Windows上运行,则Umlauts在生成的.json文件上显示为问号``。

我尝试过的事情:
1.在(Eclipse)我正在使用的IDE中将项目文本文件的编码设置为UTF-8
2.将Excel文件的编码(在Windows上)设置为UTF-8

这是我的代码的基本结构,它使用库json simple,gson和apache-poi。

读取.xlsx文件:

FileInputStream in = new FileInputStream(file);
Workbook workbook = new XSSFWorkbook(in);

我在各处使用的用于读取单元格Row.getCell(index).getStringCellValue()内容的函数。

我将读取的内容放在Spiel类型的对象的字符串字段中,并从该对象生成相应的.json文件,如下所示:

FileWriter writer = new FileWriter("Levels.json");

Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
gson.toJson(spiel, writer);

writer.close();

正如我所说,当我在Mac上运行时,一切运行正常。 Excel文件中有Umlauts,当我在TextEdit上打开生成的.json文件(作为UTF-8编码文件)时,它们会正常显示。

如果我在Windows上运行,并在例如打开生成的.json文件,写字板,所有的Umlaut都被替换为该符号``。

由于以后我需要在Windows上运行该程序,因此我确实需要解决此问题。我可能做错了什么?

1 个答案:

答案 0 :(得分:4)

问题在于FileWriter不允许您指定字符集,而是使用平台默认字符集,每个字符集可能不同。 (MacOS是“ UTF-8”,而Windows上是Windows特定于Windows的设置)

代替使用:

Writer writer = new OutputStreamWriter(new FileOutputStream("Levels.json"), 
                                       StandardCharsets.UTF_8);

(JSON始终按照JSON标准使用UTF-8字符集)