php – 单字节字符编码的两个字节字符(ISO-8859-1)HTML文档
我了解到ISO-8859-1是一个单字节字符集.
请参阅第http://www.manoramaonline.com/cgi-bin/MMOnline.dll/portal/ep/malayalamContentView.do?tabId=11&programId=1073753760&BV_ID=@@@&contentId=15238737&contentType=EDITORIAL&articleType=Malayalam%20News页.它使用的是马拉雅拉姆语. HTTP标头和元标记告诉它使用ISO-8859-1作为字符编码. 但是在这个页面中使用了一个双字节字符(0x201A)(http://unicodelookup.com/#%E2%80%9A). (复制角色并在http://unicodelookup.com查找) <div id="articleTitleMal" style="padding-top:10px;"> <font face= "Manorama" > ?è?OVA¢: üí???í 1.28 ... </font> </div> 如何在单字节编码中使用双字节字符? 我不了解这一点并不是好奇心.由于不了解上述问题,我的任务之一被搁置了. 更新:他们正在使用字体www.manoramaonline.com/portal/mmcss/Manorama.ttf,我认为Manaorama字体中的一些字符使用两个字节. UPDATE2:我尝试使用以下代码将文档从ISO-8859-1转换为UTF-8. <?php $t = file_get_contents('http://www.manoramaonline.com/cgi-bin/MMOnline.dll/portal/ep/malayalamContentView.do?tabId=11&programId=1073753760&BV_ID=@@@&contentId=15238737&contentType=EDITORIAL&articleType=Malayalam%20News'); // Change the charset info in meta-tag $t = str_replace('ISO-8859-1','UTF-8',$t); file_put_contents('t.html',utf8_encode($t)); 那个时候缺少上面选择的字符. 解决方法
即使页面在HTTP标头中声明为ISO-8859-1编码,浏览器也将其解释为Windows-1252编码.这是一个长期的传统,现在正式化,例如在
WHATWG Encoding Standard.
因此,当数据包含字节82(十六进制)时,它不作为控制字符(根据ISO 8859-1)而是作为U 201A“,”(根据Windows-1252). 但是,该页面使用字体技巧,根据特殊的内部非标准编码将代码位置映射到Malayalam字符. (如果你在页面上禁用了样式表,你可以看到这一点.所有文本都变得乱七八糟.)页面实际上并不意味着包含U 201A“,”但字节82是在字体中分配马拉雅拉姆字符的字节. 因此,您需要按原样保留字节以获得相同的结果.转换为UTF-8会破坏这一点. 如果要将数据转换为Unicode,则需要找出正在使用的字体的内部编码,并在字符级别执行该映射. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |