如何将日文字段从CSV文件读入JavaBeans?

如何将日文字段从CSV文件读入JavaBeans?,java,csv,deserialization,opencsv,Java,Csv,Deserialization,Opencsv,我尝试了几种流行的CSV-to-java反序列化程序—OpenCSV、JSefa和Smooks—都没有正确读取文件: First Name,Last Name エリック,山中 花子,鈴木 一郎,鈴木 裕子,田中 政治,山村 进入我的java对象集合 OpenCsv代码: HeaderColumnNameTranslateMappingStrategy<Contact> strat = new HeaderColumnNameTranslateMappingStrategy&

我尝试了几种流行的CSV-to-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));
HeaderColumnNameTranslateMappingStrategy=新的HeaderColumnNameTranslateMappingStrategy();
层设置类型(触点类别);
层设置列映射(ColnameTransaleMap);
InputStreamReader fileReader=null;
CsvToBean csv=新的CsvToBean();
fileReader=新的InputStreamReader(新的FileInputStream(文件),“UTF-8”);
contacts=csv.parse(strat,新的CSVReader(fileReader));
在创建FileInputStream时,我尝试将字符集设置为UTF-8、UTF-16和ISO-8859-1,但集合从未正确填充。如调试器和System.out中所示,字段包含垃圾,并且记录的数量通常是错误的

  • 用于读取二进制数据流,如mp3或PNG。不要使用
    FIS
    ,而是使用来读取字符流
  • 坦率地说:如果你尝试使用的字符集不起作用,谁会在乎呢?您需要弄清楚CSV文件实际使用的编码是什么,并在读取文件时设置该编码。要在使用
    文件读取器时指定编码,请执行以下操作:
  • 此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的要自己指定这些值,请在FileInputStream上构造InputStreamReader。

  • 用于读取二进制数据流,如mp3或PNG。不要使用
    FIS
    ,而是使用来读取字符流
  • 坦率地说:如果你尝试使用的字符集不起作用,谁会在乎呢?您需要弄清楚CSV文件实际使用的编码是什么,并在读取文件时设置该编码。要在使用
    文件读取器时指定编码,请执行以下操作:
  • 此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的要自己指定这些值,请在FileInputStream上构造InputStreamReader。


    创建
    FileInputStream
    时,您究竟是如何指定字符集的?创建
    FileInputStream
    时,您究竟是如何指定字符集的?FileReader也无法工作。FileReader的问题是,它使用JVM的默认字符集,您不能使用FileInputStream来设置它。请编辑您的问题以包含。请仔细阅读我的答案,特别是报价中的粗体部分。我会编辑问题,但在所有情况下我都会按照您的建议进行操作。谢谢
    :)
    顺便说一句,如果您知道(或能够找到)CSV文件的实际编码,这将有所帮助。很多。FileReader也不起作用。FileReader的问题是,它使用JVM的默认字符集,您不能使用FileInputStream来设置它。请编辑您的问题以包含。请仔细阅读我的答案,特别是报价中的粗体部分。我会编辑问题,但在所有情况下我都会按照您的建议进行操作。谢谢
    :)
    顺便说一句,如果您知道(或能够找到)CSV文件的实际编码,这将有所帮助。很多