当前位置: 首页 > 知识库问答 >
问题:

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

丘畅
2023-03-14

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

我的问题:
如果程序在MacOS上运行,一切正常。
如果程序在Windows上运行,Umlauts在生成的. 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);

我在任何地方都使用这个函数来读取单元格行的内容。getCell(索引)。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上的json文件(作为UTF-8编码文件)正常显示。

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

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

共有1个答案

宿镜
2023-03-14

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

而是使用:

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

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

 类似资料:
  • 问题内容: 我尝试使用java.io.FileReader读取一些文本文件并将其转换为字符串,但是我发现结果编码错误并且根本不可读。 这是我的环境: Windows 2003,操作系统编码:CP1252 Java 5.0 我的文件是UTF-8编码或CP1252编码的,其中一些(UTF-8编码的文件)可能包含中文(非拉丁)字符。 我使用以下代码来完成我的工作: 上面的代码不起作用。我发现FileRe

  • 我一直在读很多帖子,包括这篇 Javascript导出CSV编码utf-8问题 我知道很多人提到这是因为microsoft excel,使用这样的东西应该是可行的 https://superuser.com/questions/280603/how-to-set-character-encoding-when-opening-excel 我在ubuntu(它甚至没有任何问题)上试过,在window

  • 问题内容: 我正在使用Java Mail API,并且正在尝试通过Gmail的SMTP发送电子邮件。我的程序如何工作:java.util.Scanner类用于获取用户输入- 我正在询问用户要在邮件发送类中使用的各种参数;它执行以下操作: 只要我使用ASCII符号/字符,一切都可以正常工作。但是每当我想使用“国家特定”字符(例如[õäöü])时,我都会得到一堆看起来很奇怪的符号… 到目前为止,我使用

  • 我想知道是否有人能帮忙,我很难将UTF-8字符发布到SagePay。数据库是MySQL,带有数据库字符集utf8和数据库排序规则utf8_general_ci。数据库连接字符串使用useUnicode=true 所有发布到数据库的数据都存储为UTF-8,所有查询的数据都显示为UTF-8,但当字符串编码如下时: 然后发到SagePay,他们会收到一个来自国际字符所在位置的乱码字符串。如果字符串中不包

  • 我必须这么做 > 从pdf中提取文本,我大致使用了这个 缩放PDF 最后在pdf的每一页上写些东西。我使用此处提到的14种受支持字体之一https://pdfbox.apache.org/1.8/cookbook/workingwithfonts.html.在这种情况下,泰晤士报是新罗马的。 用做 由于公司原因,我忽略了签名和捕获块。我总是关闭内容流。 大多数情况下,经过处理的PDF文件在Chro

  • 我有一个导出CSV文件的PHP脚本。我的用户然后在Excel中编辑文件,保存它,并重新上传它。 如果他们在字段中键入欧元符号,则在上载文件时,欧元符号以及之后的所有内容都将丢失。我正在使用str_getcsv函数。 如果我尝试转换编码(比如UTF-8),欧元符号就会消失,我会得到一个缺少的字符标记(通常由一个空白的正方形或菱形中的问号表示)。 如何将编码转换为UTF-8,同时保留欧元符号(和其他非