web-dev-qa-db-ja.com

メモ帳++のANSIからUTF-8へ

ANSIでエンコードされたテキストがあります。

ANSI text file

それをUTF-8に変換しようとすると(Notepad ++メニューのEncoding> UTF-8を使用)、いくつか変な文字が表示されます。

UTF-8 text file

私はUTF-8がANSIのスーパーセットであり、その後そのような問題を抱えることはないだろうと思いました。私はそれらの奇妙な文字の出現を避けることができるとにかくありますか?

24
user3658425

UTF-8は文字セットではなく、Unicodeのエンコーディングです。最初の128文字はASCIIと同じですが、上位128バイトが異なります。上位ビットが設定された(または> = 0x80)バイトはASCIIの拡張文字ですが、UTF-8ではマルチバイトシーケンスの開始バイトを示します。それは上記の0x93または0x94の場合です。しかし、私はファイルに何も奇妙には見ません。これらは、 スマート引用符 、または開始引用符とクローズ引用符の形式が異なる引用符です。これらはMS Wordなどのリッチテキストエディタを使用するときによく見られます。

編集する

質問が編集されました。あなたが間違ったツールを選んだからだと思います。 encodeメニュー項目は、間違った文字表示がある場合にエンコーディングを変更するためのものです。ディスクから読み取られた同じバイトシーケンスを別のエンコーディングとして扱うだけです。 ASCIIとUTF-8は異なるため、不正なUTF-8バイトシーケンスになり、上記の結果が表示されます。入力バイト全体を変更するにはconvert to UTF-8を選択する必要があります。

notepad encoding

また、ANSIとASCIIを混同しました。 ANSIは、Windows-1252を意味します。これは、英語版Windowsおよび一部の西ヨーロッパ言語で使用されている文字セットです。これはISO 8859-1のスーパーセットですが、ISO 8859-1はANSIと呼ばれることもあります。 ISO 8859-1はUnicodeの最初の256コードポイントでもあるため、Unicodeのサブセットですが、UTF-8エンコーディングとは互換性がありません。 ASCIIは7ビット文字セットで、8ビットでエンコードされたANSIのサブセットですが、ANSIとも呼ばれますが、あまり正しくありません。

https://en.wikipedia.org/wiki/ANSI_character_set

一般に、文字セット間の関係は次のとおりです。

ASCII < ISO 8859-1 < Windows-1252
        ^
        Unicode
38
phuclv