iconv转换出现“非法输入序列”的问题
今天在进行一个页面编码转换时,遇到了非法输入序列的错误。而查看转换后的输出,发现转换只进行了一半,未完全完成转换。
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
后来又看到,其还支持使用//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点用的大小要小。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/iconv-error/2809.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.