最近在做一个读取CSV文件,解析其中数据并入库的功能,使用的是OpenCSV组件,CSV文件字符集是GB2312,读取文件流时使用的也是GB2312字符集,但最终测试结果发现写入数据库的中文中存在乱码,奇怪的是同一个字段中的中文,只乱码一部分。
最初怀疑是OpenCSV组件问题,但测试发现从CSV文件读取到流中时就已经乱码,如下:
解决方法:
GB2312是以简体中文为基础的国际标准汉字编码集,共收录六七千个简体汉字和其它非汉字的字符,而读取CSV文件中,存在未收录的汉字,如“埇”、“昇”等,这就导致了乱码。
解决方法是读取文件输入流时,以GBK编码进行读取,因为GBK能够用来表示繁体字和简体字,而GB2312只支持简体字,GBK兼容GB2312。
InputStreamReader inputStreamReader = = new InputStreamReader(new FileInputStream("D:\\test.csv"), "GBK");
BufferedReader br = new BufferedReader(inputStreamReader);
String s;
while ((s = br.readLine()) != null){
System.out.println(s);
}