iconv错误Detected an illegal character in input string问题解决

02/02/2013

在几天Kaijia还在改进@HFLS2012,新功能希望将旧版校网的数据整合到搜索中,在抓取旧版校网信息时遇到了一个问题。由于旧版校园网离现在已经10年多了,当时写的时候编码还是GB2312,但@HFLS2012编码是UTF-8所以需要将抓取到的内容转换为UTF-8字集。这个采集脚本是用php写的,在转换时Kaijia使用的是iconv函数,代码是:

程序写完后就去睡觉让它采集了,起来后发现遇到了很多PHP Notice错误“iconv(): Detected an illegal character in input string”,根据输出的日志回查发现报错的文章都没有采集完成,很多都在某个生僻字上中断。于是查询了一些资料,发现问题处在GB2312子集上,以下引用维基百科的解释

由于GB 2312-80只收录6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。

阅读更多