由于 NUL 字符,无法解析 csv 文件 [ SuperCSV , Java ]

问题描述 投票:0回答:1

我为 csv 文件编写了一个解析器。我将 SuperCSV 库用于 Java

一开始一切正常。但现在我面临一个问题。我开始收到奇怪的 csv 文件。我总是用 Notepad++ 打开它们。这时候文件看起来就跟平常一样了,右下角的编码是标准的UTF-8,这样就OK了:

但同时,文中出现了奇怪的NUL字符(有一个字母“L”)

由于它们,文件未被解析。我开始调试代码,这就是我发现的:首先有一个包含列名称的文件头。然后有 2 行没有这个 NUL 字符。这两行可以正常解析:

但是第三行第一次包含 NUL 字符,从那一刻起,所有内容都被错误地解析。库停止识别行尾(“ ”字符)和分隔符(符号“|”),并尝试将多行解析为一行:

// I use this preference:
private static final CsvPreference CSV_PREFERENCE = new CsvPreference.Builder('\u0000', '|', "\n").build();

好吧,我们得到了相应的错误:

2023-10-22T13:18:27,208: ERROR [executor-4] service.ParseServiceImpl - The number of columns to be processed (33) must match the number of CellProcessors (13): check that the number of CellProcessors you have defined matches the expected number of columns being read/written
org.supercsv.exception.SuperCsvException: The number of columns to be processed (33) must match the number of CellProcessors (13): check that the number of CellProcessors you have defined matches the expected number of columns being read/written
    at org.supercsv.util.Util.executeCellProcessors(Util.java:78) ~[super-csv-2.1.0.jar:?]
    at org.supercsv.io.AbstractCsvReader.executeProcessors(AbstractCsvReader.java:203) ~[super-csv-2.1.0.jar:?]
    at org.supercsv.io.CsvBeanReader.read(CsvBeanReader.java:206) ~[super-csv-2.1.0.jar:?]

请告诉我,这个奇怪的NUL符号是什么?为什么会出现?因此,解析停止工作。

java csv notepad++ supercsv nul
1个回答
0
投票

根据经验,您应该始终清理输入文件。删除您不需要的任何特殊字符,或者可能用作危害安全的攻击媒介的特殊字符,或者您知道无法处理或在您的上下文中无效的特殊字符。

当您阅读此 CSV 时,请选择您准备支持的一系列 ascii/UTF-8 字符,然后从文件中删除其他所有内容。您需要不信任创建此 CSV 文件的人。

如果您拥有 CSV 源系统,可能只需查看它如何创建此文件,这可能会提示您为什么要添加 nul。 NUL,实际上计算为零,与 null 不同,null 只是 null。

© www.soinside.com 2019 - 2024. All rights reserved.