如何使用 uniVocity-parsers 处理不可打印的字符
how to use uniVocity-parsers to process non-printable character
我想使用 Java 和 uniVocity-parsers 来解析由 mysql select into outfile
生成的 csv 数据。
现在遇到一种处理non-printable字符的情况! mysql table包含bit(1)
列当使用 select into outfile
将其数据保存到文件中时,我发现 bit(1)
列数据变为非 printable 字符。使用 uniVocity-parsers 获取线数据时,我得到 bit(1)
列的 null
值。我希望获得 bit(1)
列的真实数据。我应该怎么办 ?
这里的问题是 MySQL 将 bit(1)
值作为字符 \u0000
和 \u0001
导出,默认情况下解析器会修剪所有值(意思是任何字符 <= ' '
)。修剪过程将消除 \u0000
和 \u0001
,因为它们的整数表示分别是 0
和 1
,而空白字符的整数表示 ' '
是32
.
您只需配置该解析器以防止修剪值:
settings.trimValues(false);
此外,您提供的文件中有以 \r\n
结尾的行。如果您在 OSX 或 Linux 上解析它,您需要明确定义行结尾:
settings.getFormat().setLineSeparator("\r\n");
或启用自动检测:
settings.setLineSeparatorDetectionEnabled(true);
希望这对您有所帮助
我想使用 Java 和 uniVocity-parsers 来解析由 mysql select into outfile
生成的 csv 数据。
现在遇到一种处理non-printable字符的情况! mysql table包含bit(1)
列当使用 select into outfile
将其数据保存到文件中时,我发现 bit(1)
列数据变为非 printable 字符。使用 uniVocity-parsers 获取线数据时,我得到 bit(1)
列的 null
值。我希望获得 bit(1)
列的真实数据。我应该怎么办 ?
这里的问题是 MySQL 将 bit(1)
值作为字符 \u0000
和 \u0001
导出,默认情况下解析器会修剪所有值(意思是任何字符 <= ' '
)。修剪过程将消除 \u0000
和 \u0001
,因为它们的整数表示分别是 0
和 1
,而空白字符的整数表示 ' '
是32
.
您只需配置该解析器以防止修剪值:
settings.trimValues(false);
此外,您提供的文件中有以 \r\n
结尾的行。如果您在 OSX 或 Linux 上解析它,您需要明确定义行结尾:
settings.getFormat().setLineSeparator("\r\n");
或启用自动检测:
settings.setLineSeparatorDetectionEnabled(true);
希望这对您有所帮助