【发布时间】:2018-04-28 11:18:13
【问题描述】:
我正在使用 Spring Batch 读取 csv 文件,当我使用 Notepad++ 打开这些文件时,我看到使用的编码是 encode in ANSI。
现在从文件中读取一行时,我注意到所有重音字符都没有正确显示。例如,让我们采取这一行:
Données issues de la reprise des données
它变成了这样一个带有一些特殊字符的:
因此,作为第一个解决方案,我将项目阅读器的编码设置为 utf-8,但问题仍然存在。
- 我认为使用
UTF-8编码我的所有重音字符都会被识别,这不是真的吗?据我所知,UTF-8 是用于处理网页上所有字符的最佳编码?
将我的项目阅读器编码设置为ISO-8859-1后:
public class TestItemReader extends FlatFileItemReader<TestFileRow> {
private static final Logger log = LoggerFactory.getLogger(TestItemReader.class);
public ScelleItemReader(String path) {
this.setResource( new FileSystemResource(path + "/Test.csv"));
this.setEncoding("ISO-8859-1");
我看不到这些字符现在可以正确显示。
- 作为输出,我应该使用
utf-8作为编码,如果我使用ISO-8859-1作为编码输入并使用utf-8作为输出,这是否正确?
【问题讨论】:
-
"我的问题是,为什么当我尝试将 itemReader 编码设置为 utf-8 时仍然存在?" - 嗯,因为文件不是 UTF-8 格式。老实说,不清楚你在问什么。
-
我更新帖子
-
我怀疑您不了解编码的工作原理。如果一个文件以 ISO-8859-1 编码并且您尝试使用 UTF-8 读取它,这有点像尝试使用 PNG 阅读器加载 JPEG 图像。 UTF-8 可以表示 Unicode 中的每个字符,但这并不意味着您可以任意将其用于以不同编码方式编码的文件。
-
您可能想阅读csharpindepth.com/Articles/General/Unicode.aspx - 它是用 C# 表达的,但概念是相同的。
-
好吧,“ANSI”也不是单一编码。如果您可以更改生成 CSV 文件的内容以输出 UTF-8,那将是最好的选择。但是如果你不能改变它,你应该找出它使用的是什么编码(而不仅仅是依赖 Notepad++)。
标签: java encoding spring-batch