Fer*_*s.o 6 java encoding spring-batch
我正在使用 spring 批处理读取 csv 文件,当我用 Notepad++ 打开这些文件时,我看到使用的编码是encode in ANSI. 现在,当从文件中读取一行时,我注意到所有重音字符都没有正确显示。例如,让我们采取这一行:
Données issues de la reprise des données
Run Code Online (Sandbox Code Playgroud)
它变成了这样的,带有一些特殊字符:
因此,作为第一个解决方案,我将 Item Reader 的编码设置为,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");
Run Code Online (Sandbox Code Playgroud)
我看不到这些字符现在显示正确。
utf-8as encoding编写,如果我ISO-8859-1用作编码输入和utf-8输出,这是否正确?我有同样的问题。输入文件是 ANSI,“\xc3\xbc”在输出中显示为正方形。
\n这是因为您的输入文件是用 ANSI 编码的,但默认情况下,Spring Batch 采用 ISO-8859-1 编码(6.6.2 FlatFileItemReader)。
\n 2023 更新:在较新的版本中,默认值是 UTF-8,但当问题发布时,它是 ISO-8859-1,可以通过检查链接文档的旧版本来验证;例如版本 4.0.1.RELEASE。我不确定当时哪个版本是最新的,但无论如何,要点都是一样的。
因此,您必须将阅读器的编码设置为“Cp1252”( setEncoding("Cp1252")) -这就是 Java 引用 ANSI 编码的方式。
此外,您必须将编写者的编码设置为“utf-8”。我不完全确定为什么它不能与其他编码一起使用(通常能够显示“\xc3\xbc”,例如 ISO-8859-1),但它可以与 UTF-8 一起使用,因此这就是我正在使用的。
\n