这是一个奇怪的场景,而不是传统的将一种编码转换为另一种编码。
问题
我使用Readability API从给定的 url 检索主要内容,如果目标 url 用 UTF-8 编码,它工作正常,但是当目标 url 编码为GB2312
(中文编码之一)时,我得到垃圾信息(中文字符是错误编码但英文字母和数字工作正常)。
深入研究
我检查了 HTTP 标头 Readability API 返回,它表明 API 响应的编码是UTF-8
.
这是一段错误编码的汉字:
ÄÉ´ï¶û¾ø¾³Ï´󷴻÷¾Ü¾øÀäÃÅÄæת½ú¼¶ÖÐÍøËÄÇ¿
长度:42
原来是:
纳达尔绝境下大反击拒绝冷门逆转晋级中网四强
长度:21
但是,如果将正确的中文转换成unicode,应该是:
纳达尔绝境下大反击拒绝冷门逆转晋级中网四强
试过但不工作
iconv("GB2312", "UTF-8", $str);
iconv("GBK", "UTF-8", $str);
iconv("GB18300", "UTF-8", $str);
mb_convert_enconding($str, "UTF-8", "GB2312");
mb_convert_enconding($str, "UTF-8", "GB18300");
mb_convert_enconding($str, "UTF-8", "GBK");
请求的解决方案
由于 Readability API 没有为目标 url 的字符集提供参数(我将此 API 称为https://www.readability.com/api/content/v1/parser?url=http://sports.sina.com。 cn/t/2013-10-04/14596813815.shtml&token=my_token_here),我必须在处理 API 响应时进行转换。
如果您对此问题有任何想法,我将不胜感激。
环境信息:PHP 5.3.6