我曾经写过一个脚本,目的是将mysql latin1编码表内容转换成utf8。原理是:用脚本识别出哪些表是latin1之后再用into outfile 导出后,再用linux 下的工具iconv转成utf8格式。再用load data导入对应的表。脚本写完之后,执行后发现在utf8编码环境下打开显示乱码。--抛开方法不说(应该有更好的办法。其它办法好像是转换后表内容乱码。只是改变了表编码)
转入正题如下:
192.168.1.176-sms@wddev$/tmp/outfile/latin -->file xmloplog_outfile_latin1
xmloplog_outfile_latin1: ISO-8859 text, with very long lines
使用如下命令转换:(在网上查了下,大多数文章说这类的转换-f 为ISO-8859-? 一个个去试)
iconv -f ISO-8859-1 -t uft8 xmloplog_outfile_latin1 -o xmloplog_outfile_utf8
file 显示:
192.168.1.176-root@wddev#/tmp/outfile/latin -->file xmloplog_outfile_utf8
xmloplog_outfile_utf8: UTF-8 Unicode text, with very long lines
但内容却是乱码。后面我上网搜了很多,大多数人都用相同的办法。没有找到办法,转换这一步我只好用ultraedit 操作....
之后有一天在另一服务器上看一个crontab 发现-l 乱码。-e显示却是正常。系统编码为:utf8 , file 对应的crontab 文件显示:
sms: ISO-8859 text
又是这样的编码。后面我上传了下windows下的一个文件,用file看了下也是这样的ISO-8859 text。(突然想起win下默认应该是gbk)
所以iconv 的时候-f gbk 了一下,结果显示正常。
结论(不一定对):
凡显示 ISO-8859 text 用iconv 转换的用-f gbk (gb2312,gb18030) 转换成你想要的编码。 用file是看不出来的。
目前验证过的 包括: mysql latin1 , windows下文件,linux下utf8查看乱码文件。统一用:
iconv -f gbk -t uft8 sourcefile -o destinationfile
阅读(11617) | 评论(0) | 转发(0) |