今天在进行一个页面编码转换时,遇到了非法输入序列的错误。而查看转换后的输出,发现转换只进行了一半,未完全完成转换。

1[root@gataway test]# iconv -f gb2312 -t utf-8 003.htm > 003.dd
2iconv: 未知 5627 处的非法输入序列

原页面使用的是gbk2312的编码,因为查看原文的原代码时可以找到如下一行:

1<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

而网上给出的解决方法是使用-c参数,忽略错误。使用了-c参数后,再进行转换发现可以正常进行转换,而且可以转换完成,但转换的结果里出现了乱码。

1[root@gataway test]# iconv -c -f gb2312 -t utf-8 003.htm > 003.dd

iconv

后来又看到,其还支持使用//IGNORE方式(类以于-c参数),具体用了三种输入方式,看中间细微的查别:

1[root@gataway test]# iconv -f gb2312//IGNORE -t utf-8//IGNORE  003.htm > pp
2iconv: 未知 8731 处的非法输入序列
3[root@gataway test]# iconv -f gbk//IGNORE -t utf-8//IGNORE  003.htm > pp
4[root@gataway test]# iconv -f gbk2312//IGNORE -t utf-8//IGNORE  003.htm > pp
5iconv: 不支持以“gbk2312//IGNORE”为源头的转换
6试用“iconv --help”或“iconv --usage”以获取更多信息。
7[root@gataway test]#

有没有看出不同,这里用的是gbk正常,最后测试结果也发现。第二种输入是正常转换和显示的,第一种和最原始不加-c一样,方法三不支持。最后使用gbk代替gbk2312在使用-c参数和不使用-c参数时都能正常进行转换。

1[root@gataway test]# iconv -f gbk -t utf-8  003.htm > pp
2[root@gataway test]# iconv -c -f gbk -t utf-8  003.htm > pp

总结:

1、在使用iconv转换时,只看原文件的源代码里的标记格式嵌套转换不一定是对的。具体情况还在看实际的转换结果而定。

2、从转换前后的大小来看,在汉字比较多的情况下,utf-8格式要比gbk2312点用的大小要大,但utf-8的国际通用性更好(这也从另一个侧面反映了为什么网易、新浪等站用的是gbk2312,凤凰网等用的utf-8)。(后面的是从网上查到的)但在英文字符较多的页面中,utf-8格式的页面比gbk2312点用的大小要小。