csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators

先吐槽一句,md有点坑~

今天遇到一个问题,就是做一个csv文件进行统计的时候,我需要把数据加载到Hive表中,为了方便查询,创建外部表以后,将数据文件放到HDFS系统的目录下面以后,发现csv文件出现了中文乱码:后来查看文件格式发下如下:

文件是什么鬼?怎么转换,然后写代码,通过文件流来进行转换,发现md不行,代码如下:

package files;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;

public class FileRW {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader (
				new FileInputStream ("/Users/zhangchenguang/Desktop/china_cities_20160101(1).csv"),
				"ISO-8859"
			)
		);
        BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (
        		new FileOutputStream ("/Users/zhangchenguang/Desktop/1.csv"),
        		"UTF-8"
        	)
        );
		int chs = 0 ;
		while((chs=br.read()) != -1){
			bw.write(chs);
		}
		
		br.close();
		bw.close();
	}
}

执行完发现,没这个编码,我TM要哭了~

执行结果如下:

csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators_第1张图片

然后开始寻找编码转换的答案:查看目前是否支持这个编码,答案是肯定的,有的... md 好烦~好慌~

csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators_第2张图片

然后百度了一下,找了几篇博客发现,有人说gbk,get到这个点以后,抱着试试看的态度试了一把~~~

iconv -f 'gbk' -t 'utf-8' china_cities_20160101\(1\).csv > utf8.txt

file utf8.txt

more utf8.txt

csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators_第3张图片

发现,我TM可以了???

难道ISO-8859 编码可以当做 gbk来处理?

在程序中试一把,结果如下:

csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators_第4张图片

咦,好了,,,哈哈哈.......

csv字符编码修改,中文乱码,文件格式为ISO-8859 text, with CRLF line terminators_第5张图片

难道 ISO-8859 和 gbk编码是一样的???

咱也不敢说,咱也不敢问~   

哈哈....问题搞定就好了~~~

你可能感兴趣的:(大数据,Hive)