【问题标题】:Encoding issues (german Umlaut) with Excel/Java/JsonExcel/Java/Json 的编码问题(德语变音符号)
【发布时间】:2019-04-05 00:55:19
【问题描述】:

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

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

我尝试了什么:
1. 将我正在使用的 IDE (Eclipse) 中的项目文本文件的编码设置为 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类型的Object的String Field中,并从此Object生成对应的.json文件如下:

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

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

writer.close();

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

如果我在 Windows 上运行并打开生成的 .json 文件,例如写字板,所有的元音变音都被这个符号代替了……

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

【问题讨论】:

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

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


【解决方案1】:

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

改为使用:

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

(根据 JSON 标准,JSON 始终使用 UTF-8 字符集)

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多