我有一个用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上运行该程序,因此我确实需要解决此问题。我可能做错了什么?
答案 0 :(得分:4)
问题在于FileWriter
不允许您指定字符集,而是使用平台默认字符集,每个字符集可能不同。 (MacOS是“ UTF-8”,而Windows上是Windows特定于Windows的设置)
代替使用:
Writer writer = new OutputStreamWriter(new FileOutputStream("Levels.json"),
StandardCharsets.UTF_8);
(JSON始终按照JSON标准使用UTF-8字符集)