3

これは、私のテキスト エディターで latin 1 形式で保存された test.html ファイルです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
è
</body>
</html>

ファイルを chrome で表示すると、è 文字が疑問符として表示されます。理由がわかりません: è は latin 1 の一部であり、latin 1 は utf-8 (のサブセット) と互換性があるはずなので、文字 è のコードは latin 1 と utf-8 で同じであってはなりません?

文字セットを ISO-8859-1 に変更すると、もちろんすべて問題ありません。

ありがとう

4

3 に答える 3

8

文字セット/コードページの概念とエンコーディングを混同しています。UTF-8 と ISO-8859-1 (Latin-1) はエンコーディングです。文字をバイト単位で表現する方法のシステムであり、選択した文字のリストではありません。

ファイルを ISO-8859-1 として保存すると、ファイルには0xE8. ファイルが UTF-8 でエンコードされていることをブラウザーに伝えると、ブラウザーは UTF-8 の規則に従ってファイルをデコードしようとします。UTF 0xE8-8 では無効です。

ブラウザに ISO-8859-1 でデコードするように指示すると、 は ISO-8859-1 で0xE8有効であり、 の値に従って ISO-8859-1 のコードページから文字が表示されるため、機能します0xE8

また、ISO-8859-1 はUnicode (utf エンコーディングの「コードページ」) のサブセットであり、UTF-8 ではありません。つまり、ISO-8859-1 のコードページの最初の 256 文字は、Unicode の最初の 256 文字と同じ文字です。

そして、もっとあります。ブラウザは実際には ISO-8859-1 を使用してページをデコードすることはありませんが、代わりに密かに Windows-1252 を使用します。これはHTML-5 ドラフトでも指定されています

于 2012-12-13T20:50:04.850 に答える
1

ファイルを Latin 1 で保存すると、エンコーディングが UTF-8 であるという charset 属性の宣言は正しくありません。charset 属性が宣言するエンコーディングでファイルを保存する必要があります。

于 2014-03-25T01:46:42.640 に答える
1

128 ~ 255 の範囲の Latin-1 文字は、UTF-8 コンテキスト内では無効です。これらは同じ文字コードを共有していますが、UTF-8 では表現が異なります。たとえばè、UTF-8 では実際にはè. to範囲内0xE8の 2 文字が後に続く場合を除き、UTF-8 文字列では有効な文字ではないため、置換文字を取得します。\x80\xBF

于 2012-12-13T20:45:28.607 に答える