文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Unicode BOM类型编码的文件处理

Unicode BOM类型编码的文件处理

时间:2010-08-02  来源:freshpassport

[本文是原创文章,作者保留所有权利,转载请注明出处]
最近遇到一个问题,在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 ~$ 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:要说的是,前提是你的系统要安装中文支持才行。哈哈。

[本文是原创文章,作者保留所有权利,转载请注明出处]
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载