最近遇到了一些转码问题:
iconv('shift-jis', 'utf-8//IGNORE', $data) 竟然还会报错,不是说加入了//IGNORE 就忽略错误了啊?
错误信息如下:
ErrorException: iconv(): Detected an incomplete multibyte character in input string in
调查了半天没什么头绪,由于代码最终是要在linux下运行的,随即想到了可以使用
iconv('sjis-win', 'utf-8//IGNORE', $data),
这代码在windows下报错:
ErrorException: iconv(): Wrong charset, conversion from `SJIS-win' to `utf-8//IGNORE' is not allowed in 。 不过还好在linux没什么问题,进入可以转码成功。
这两天客户又在问,这个方法是不是100%保险,会不会还有其他生僻字会报错,汗颜。。。。。
无奈继续调查,翻阅资料,发现又这么一个函数:
mb_convert_encoding,
然后还可以加入参数:
mb_convert_encoding ($data[$i], 'utf-8', 'auto'),但是代码一跑还是爆了。
原来这个'auto' 只是包括了 如下编码:/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
然后忽然想到了这么一个方法:mb_convert_encoding ($data[$i], 'utf-8', 'JIS, eucjp-win, sjis-win,shift-jis,utf-8') 我是不是可以把所有的编码放进去,这样就永远不会报错了啊。
博客探讨了在处理字符编码转换时遇到的问题,特别是在iconv和mb_convert_encoding函数中的使用。作者发现iconv在处理shift-jis到utf-8转换时即使使用//IGNORE仍然报错,而在不同操作系统下表现不一致。尝试使用mb_convert_encoding并指定多种可能的源编码,但发现'auto'选项有限。最后提出了一个将所有可能编码列举出来的策略以避免错误,但对是否100%保险仍存疑虑。
3403

被折叠的 条评论
为什么被折叠?



