【问题标题】:What is the proper encoding to use with item Reader与 item Reader 一起使用的正确编码是什么
【发布时间】: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


【解决方案1】:

我遇到了同样的问题。输入文件为 ANSI,“ü”在输出中显示为正方形。

这是因为您的输入文件是用 ANSI 编码的,但默认情况下是 Spring Batch assumes ISO-8859-1 encoding (6.6.2 FlatFileItemReader)。

因此,您必须将阅读器的编码设置为“Cp1252”(setEncoding("Cp1252"))-that's how Java refers to ANSI encoding.

此外,您必须将编写器的编码设置为“utf-8”。我不完全确定为什么它不适用于其他编码(通常能够显示“ü”,例如 ISO-8859-1),但它适用于 UTF-8,所以这就是我正在使用的.

【讨论】:

    【解决方案2】:

    我使用相同的编码“ISO-8859-1”,所有字符都正确显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 2018-04-10
      • 2013-01-02
      • 1970-01-01
      • 2020-08-27
      • 2020-07-10
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多