先吐槽一句,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要哭了~
执行结果如下:
然后开始寻找编码转换的答案:查看目前是否支持这个编码,答案是肯定的,有的... md 好烦~好慌~
然后百度了一下,找了几篇博客发现,有人说gbk,get到这个点以后,抱着试试看的态度试了一把~~~
iconv -f 'gbk' -t 'utf-8' china_cities_20160101\(1\).csv > utf8.txt
file utf8.txt
more utf8.txt
发现,我TM可以了???
难道ISO-8859 编码可以当做 gbk来处理?
在程序中试一把,结果如下:
咦,好了,,,哈哈哈.......
难道 ISO-8859 和 gbk编码是一样的???
咱也不敢说,咱也不敢问~
哈哈....问题搞定就好了~~~