如何在使用csvformat时始终将多部分文件转换为utf-8?

0pizxfdo  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(464)

我正在使用一个springbootsrestapi上传csv文件multipartfile。使用org.apache.commons.csv的csvformat库对多部分文件进行格式化,使用csvparser进行解析,并将迭代记录存储到mysql数据库中。

csvParser = CSVFormat.DEFAULT
            .withDelimiter(separator)
            .withIgnoreSurroundingSpaces()
            .withQuote('"')
            .withHeader(CsvHeaders.class)
            .parse(new InputStreamReader(csvFile.getInputStream()));

观察结果是,当csv文件上载为utf-8字符集时,效果良好。但是如果csv文件的格式不同(ansi等),那么它的德语和其他语言字符的编码将变成一些随机符号。
例子äößü 被编码为����
我尝试了下面指定的编码标准,它没有工作太多。

csvParser = CSVFormat.DEFAULT
            .withDelimiter(separator)
            .withIgnoreSurroundingSpaces()
            .withQuote('"')
            .withHeader(CsvHeaders.class)
            .parse(new InputStreamReader(csvFile.getInputStream(), StandardCharsets.UTF_8));

你能给个建议吗。事先非常感谢。

mccptt67

mccptt671#

你做了什么 new InputStreamReader(csvFile.getInputStream(), StandardCharsets.UTF_8) 告诉csv解析器inputstream的内容是utf-8编码的。由于utf-8(通常)是标准编码,这实际上与使用相同 new InputStreamReader(csvFile.getInputStream()) .
如果我没弄错你的问题,这不是你想要的。相反,您希望根据导入文件自动选择正确的编码,对吗?不幸的是,csv格式不存储使用的编码信息。有一些库可以用来根据文件中包含的字符猜测最可能的编码。虽然它们相当准确,但它们仍然是猜测,并且不能保证最终会得到正确的编码。
根据您的用例,与消费者就固定编码达成一致可能更容易(即,他们可以上传utf-8或ansi,但不能同时上传两者)

js81xvg6

js81xvg62#

尝试如下所示,这对我的工作同样的问题

new InputStreamReader(csvFile.getInputStream(), "UTF-8")

相关问题