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

使用Excel/Java/Json编码问题(德语Umlaut),java,json,excel,utf-8,apache-poi,Java,Json,Excel,Utf 8,Apache Poi,我有一个Java小程序,它从.xlsx文件中读取内容,并将其中的一些内容写入一个新的.json文件。 在.xlsx单元格中有一些带有德语Umlautsä,ö,ü的字符串 我的问题是: 如果程序在MacOS上运行,一切正常。 如果程序在Windows上运行,UMLAUT将显示为问号� 在生成的.json文件上 我尝试的是: 1.将我在Eclipse中工作的IDE中的项目文本文件的编码设置为UTF-8 2.将Windows上Excel文件的编码设置为UTF-8 下面是我的代码的基本结构,使用json

我有一个Java小程序,它从.xlsx文件中读取内容,并将其中的一些内容写入一个新的.json文件。 在.xlsx单元格中有一些带有德语Umlautsä,ö,ü的字符串

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

我尝试的是: 1.将我在Eclipse中工作的IDE中的项目文本文件的编码设置为UTF-8 2.将Windows上Excel文件的编码设置为UTF-8

下面是我的代码的基本结构,使用json simple、gson和ApachePOI库

读取.xlsx文件:

FileInputStream in = new FileInputStream(file);
Workbook workbook = new XSSFWorkbook(in);
我在everywhere中使用的函数用于读取单元格行的内容。getCellindex.getStringCellValue

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

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

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

writer.close();
正如我所说,当我在Mac上运行时,一切都很好。 Excel文件中有UMLAUT,当我在TextEdit上以UTF-8编码文件的形式打开生成的.json文件时,它们会正常显示

如果我在Windows上运行并在写字板上打开生成的.json文件,则所有UMLAUT都将替换为此符号�.

因为我以后需要在Windows上运行这个程序,所以我真的需要解决这个问题。我可能做错了什么?

问题是FileWriter不允许您指定字符集,而是使用平台默认字符集,每个字符集可能不同。并且是针对MacOS的UTF-8,而它是Windows上特定的Windows设置

而是使用:

Writer writer = new OutputStreamWriter(new FileOutputStream("Levels.json"), 
                                       StandardCharsets.UTF_8);
JSON总是按照JSON标准使用UTF-8字符集。问题是FileWriter不允许您指定字符集,而是使用平台默认字符集,每个字符集可能不同。并且是针对MacOS的UTF-8,而它是Windows上特定的Windows设置

而是使用:

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

JSON总是按照JSON标准使用UTF-8字符集

写字板可能是最糟糕的编辑器。请尝试安装记事本++或Atom。它们可以呈现扩展字符集和Unicode编码。写字板可能是最糟糕的编辑器。请尝试安装记事本++或Atom。它们可以呈现扩展字符集和Unicode编码。