我了解到 ISO-8859-1 是一个单字节字符集。
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));
那段时间缺少上面选择的角色。
答案 0 :(得分:5)
即使页面在HTTP标头中声明为ISO-8859-1编码,浏览器也会将其解释为Windows-1252编码。这是一个长期的传统,现在正式化,例如在WHATWG Encoding Standard。
因此,当数据包含字节82(十六进制)时,它不作为控制字符(根据ISO 8859-1)而是作为U + 201A“,”(根据Windows-1252)。
但是,该页面使用字体技巧,根据特殊的内部非标准编码将代码位置映射到Malayalam字符。 (如果你在页面上禁用样式表,你可以看到这一点。所有文本都变得乱七八糟。)页面实际上并不意味着包含U + 201A“,”但是字体82中指定了Malayalam字符的字节。 / p>
因此,您需要按原样保留字节以获得相同的结果。转换为UTF-8会破坏这一点。
如果要将数据转换为Unicode,则需要找出正在使用的字体的内部编码,并在字符级别执行该映射。