iconv转换出现“非法输入序列”的问题

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

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

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


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

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

<a href="https://www.361way.com/wp-content/uploads/2013/10/iconv.jpg"><img src="https://www.361way.com/wp-content/uploads/2013/10/iconv.jpg" alt="iconv" width="470" height="125" class="alignnone size-full wp-image-2812" /></a>

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

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

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

[root@gataway test]# iconv -f gbk -t utf-8  003.htm > pp
[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点用的大小要小。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注