4

ISO-8859-1が 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を使用していることを示しています。

ただし、このページでは 2 バイト文字 (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>

シングルバイトエンコーディングで2バイト文字を使用するにはどうすればよいですか?

私はそれを知ることは好奇心ではありません。上記の問題を理解していないため、私のタスクの 1 つが行き詰まっています。

更新: 彼らはフォント www.manoramaonline.com/portal/mmcss/Manorama.ttf を使用しています。Manaorama フォントの文字の一部は 2 バイトを使用していると思います。

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));

その時、上記の選択された文字が欠落しています。

ここに画像の説明を入力

4

1 に答える 1

5

ページが HTTP ヘッダーでエンコードされた ISO-8859-1 として宣言されていても、ブラウザーはそれを Windows-1252 エンコードとして解釈します。これは長年の伝統であり、現在はWHATWG Encoding Standardなどで正式化されています。

したがって、データにバイト 82 (16 進数) が含まれている場合、それは制御文字 (ISO 8859-1 による) としてではなく、U+201A "‚" (Windows-1252 による) として解釈されます。

ただし、このページでは、特別な内部の非標準エンコーディングに従って、コード位置をマラヤーラム文字にマップするフォントトリックが使用されています。(ページでスタイル シートを無効にすると、これを確認できます。すべてのテキストが意味不明になります。) このページは、実際には U+201A "‚" を含むことを意図したものではなく、マラヤーラム文字がフォントで割り当てられているバイト 82 を含むことを意図しています。

したがって、同じ結果を得るには、バイトをそのまま保持する必要があります。UTF-8 に変換すると、これが壊れます。

データを Unicode に変換する場合は、使用されているフォントの内部エンコーディングを調べて、そのマッピングを文字レベルで実行する必要があります。

于 2013-10-17T11:05:50.300 に答える