1. 使用iconv进行转换
将使用gb18030编码的文件file1.txt转换为utf-8编码的文件file2.txt:
iconv -f gb18030 -t utf-8 file1.txt -o file2.txt
但是这个命令不好使,一方面容易重复转换,另一方面不支持通配符,无法成批转换,还有如果转换出错就会停止转换。
可以加上-c来忽视非法字符:
iconv -c -f gb18030 -t utf-8 file1.txt -o file2.txt
有时候转换需要的时间比较长,或者输出比较多,需要在后台运行:
nohup iconv -f utf-8 -t gb18030 file2.txt -o file1.txt &>file12.out &
这条命令实现了将utf-8格式的file2.txt转换为gb18030格式的file1.txt,且在后台运行,输出放在file12.out中。
2. iconv命令
【功能】
对于给定文件把它的内容从一种编码转换成另一种编码。
【描述】
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
–verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
【举例】
*列出当前支持的字符编码:
iconv -l
*将文件file1转码,转后文件输出到fil2中:
iconv -f EUC-JP-MS -t UTF-8 file1 -o file2 //没-o那么会输出到标准输出.
*实际需求,从hive中取出的数据是utf8的,要load到mysql中,gbk编码。所以在load之前要先对文件进行转码。
mysql_cmd = "iconv -c -f utf-8 -t gbk ./data/al_ver_" + yesterday_time + ".xls -o ./data/GBK_al_ver_" + yesterday_time + ".xls "
print(mysql_cmd)
os.system(mysql_cmd)
mysql_cmd = "mysql -h60.28.200.78 -uroot -pyeelion -A LogStat_RT -e \"load data local infile \'./data/GBK_al_ver_" + yesterday_time + ".xls ' into table HiveData_508\""
print(mysql_cmd)
os.system(mysql_cmd)
3. 以指定的编码打开文件
将file.txt文件按照GB18030的格式打开:
vim file.txt -c "e ++enc=GB18030"
4. 如何查看一个文件的编码
(1)在vim下面使用:
:set fileencoding