0

我已经尝试了几种流行的 CSV 到 java 反序列化器 - OpenCSV、JSefa 和 Smooks - 没有一个能正确读取文件:

First Name,Last Name
エリック,山中
花子,鈴木
一郎,鈴木
裕子,田中
政治,山村

进入我的 java 对象集合。

OpenCsv 代码:

    HeaderColumnNameTranslateMappingStrategy<Contact> strat = new HeaderColumnNameTranslateMappingStrategy<Contact>();
    strat.setType(Contact.class);
    strat.setColumnMapping(colNameTranslateMap);
    InputStreamReader fileReader=null;
    CsvToBean<Contact> csv = new CsvToBean<Contact>();
    fileReader = new InputStreamReader(new FileInputStream(file), "UTF-8");

    contacts = csv.parse(strat, new CSVReader(fileReader));

创建 FileInputStream 时,我尝试将 Charset 设置为 UTF-8、UTF-16 和 ISO-8859-1,但该集合从未正确填充。正如在调试器和 System.out 中看到的那样,这些字段包含垃圾,并且记录的数量通常是错误的。

4

1 回答 1

4
  1. FileInputStream用于读取二进制数据流,例如 mp3 或 PNG。代替 a FIS,使用 aFileReader来读取字符流。
  2. 直言不讳:如果它们不起作用,谁在乎你尝试使用的字符集?您需要弄清楚 CSV 文件实际使用的是什么编码,并在读取文件时设置该编码。使用时指定编码FileReader

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在 FileInputStream 上构造 InputStreamReader。

于 2011-11-03T23:52:29.167 回答