【发布时间】:2018-06-17 07:35:37
【问题描述】:
当我导入包含某些国家/地区的 CSV 文件时,我遇到了某些字符的问题。它没有很好地编码,然后我得到了?标记而不是写入 CSV 文件中的字符。 以下是让我遇到问题的国家:奥兰群岛、圣巴泰勒米、科特迪瓦、库拉恰。
这里是导入csv文件的代码:
ICsvBeanReader beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8),
new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useQuoteMode(new AlwaysQuoteMode()).build());
首先我使用 FileReader 并且所有这些国家都存在问题,然后我更改为 InputStreamReader 并添加此 UTF-8 字符集,问题几乎解决了。当我使用字符集 UTF-8 时,我只在阅读这个国家“ÅLAND ISLANDS”时遇到问题,结果我得到“?LAND ISLANDS”。 作为字符集,我也尝试过 ISO_8859_1、Windows-1252,但“ÅLAND ISLANDS”总是出现同样的问题。
有谁知道我应该使用哪个字符集来解决这个问题?
【问题讨论】:
-
你知道csv文件是怎么编码的吗?只需将其与字符集匹配即可。
-
也可以试试
InputStreamReader(new FileInputStream(file), "UTF8")) -
看来这不是编程问题,而是文件的编码问题。您应该确保您的文件源使用正确的编码。从你的问题看来,部分是用 UTF8 编码的,而其他部分是用 ANSI 或其他东西编码的。
-
如果你真的想找出哪些字符集看起来不错,你可以遍历 StandartCharsets 枚举,每次选择下一个并使用它来解析 csv,然后打印有问题的字符串和字符集名称- 在那里你会看到哪一个有效
-
@GuyKhmel 文件使用 UTF-8 进行编码,我尝试使用“UTF8”,但它也无法正确读取“ÅLAND ISLANDS”。
标签: java csv character-encoding