Unicode BOM类型编码的文件处理
最近遇到一个问题,在Ubuntu 10.04系统下,使用vi无法查看Unicode BOM类型编码格式的中文文件内容. 系统信息: Ubunt 10.04 环境变量: ~$ echo $LANG en_US.utf8 相关软件版本: ~$ vim --version VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 16 2010 12:47:47) Included patches: 1-330 Compiled by buildd@ $ enca --version enca 1.12 ~$ iconv --version iconv (Ubuntu EGLIBC 2.11.1-0ubuntu7) 2.11.1 使用vim查看文件,发现文件的中文内容显示为乱码,使用enca查看文件编码格式: ~$ enca -L none test.cgi Universal transformation format 8 bits; UTF-8 "none"参数表示不知道编码格式,让enca确定.从enca的结果看,test.cgi文件是UTF-8编码格式,于是使用iconv工具转换: ~$ iconv -l | grep UTF-8 ISO-10646/UTF-8/ UTF-8// 先查看iconv是否支持UTF-8,结果显示支持.开始转换: ~$ iconv -f UTF-8 -t GB2312 test.cgi iconv: illegal input sequence at position 0 iconv报错,文件的0位置编码格式错误,无法识别,转换失败. 百思不解,查google,未果. 想到用file查看文件类型: ~$ file test.cgi test.cgi: UTF-8 Unicode (with BOM) text 问题找到了,不适简单的UTF-8格式,还带了个BOM,查了一下BOM: http://unicode.org/faq/utf_bom.html 可以参考这个介绍,简单说,BOM就是一个标签,在UTF-8编码格式的文件前多了两个字节,就是这两个字节 导致vim无法显示中文. 知道问题就可以修改了,在win7可以有好多工具,在Ubuntu也可以有好多工具,简单点,使用vim修改吧. ~$ vim -b test.cgi 可以看到,文件内容的开头多了两个字节,vim使用16进制显示出来了, <feff>#!/bin/sh <>中的内容就是16进制的BOM标签,删除再保存文件就行. 再次查看文件编码类型: ~$ file test.cgi test.cgi: POSIX shell script text executable 拥有帝国一切,皆有可能。欢迎访问phome.net ~$ enca -L none test.cgi Universal transformation format 8 bits; UTF-8 file工具可以识别test.cgi文件是个脚本了,enca比较傻,结果和原来一样,关键是iconv转换: ~$ iconv -f UTF-8 -t GB2312 test.cgi -o test1.cgi 转换没问题,无任何报错,转换成功,再次使用vim查看,中文内容正常. PS:要说的是,前提是你的系统要安装中文支持才行. 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |