簡単な答え:おそらく、テキストファイルは「ANSI」でエンコードされていませんが、utf-8です。
長い答え:
まず、「ANSI」(Windowsの場合)という用語は、固定エンコーディングを意味するものではありません。その意味はあなたの言語設定に依存します。たとえば、西ヨーロッパと米国では、通常、Windows-1252(ISO / IEC 8859-1のバリアント、latin-1とも呼ばれます)、日本ではSHift JIS、アラビア諸国ではISO/になります。 IEC_8859-6。
アラビア語以外のバージョンのWindowsを使用していて、言語設定を変更しておらず、メモ帳で開いたときにファイルにアラビア文字が表示されている場合は、これらのANSIエンコーディングのいずれにも含まれていません。代わりに、おそらくUnicodeです。
「UNICODE」という意味ではないことに注意してください。これは、Windowsでは通常UTF-16LEを意味します。UTF-8の場合も あります。どちらも、現在Unicodeで定義されている100.000以上の文字すべてをエンコードできるエンコードですが、方法は異なります。どちらも可変長エンコーディングです。つまり、すべての文字が同じビット数を使用してエンコードされるわけではありません。
UTF-8では、各文字は1〜4バイトとしてエンコードされます。エンコーディングは、ASCII文字が1バイトでエンコードされるように選択されています。
UTF-16では、各文字は2つの4バイトとしてエンコードされます。このエンコーディングは、Unicodeの文字数が64K未満のときに考案されたものであるため、1つの16ビットワードですべての文字をエンコードできます。その後、Unicodeが64Kの制限を超えて拡張する必要があることが明らかになったとき、0xD800-0xDFFFの範囲の単語のペアを使用して最初の64K(マイナス0x800)文字以外の文字を表すスキームが発明されました。
ファイルに実際に何が含まれているかを確認するには、16進エディターでファイルを開きます。
- 最初の2バイトがFFFEの場合、UTF-16LE(リトルエンディアン)である可能性があります。
- 最初の2バイトがFEFFの場合、UTF-16BE(ビッグエンディアン、Windowsではほとんどありません)である可能性があります。
- 最初の3バイトがEFBBBFの場合、UTF-8である可能性があります
- 00バイトがたくさん表示される場合は、UTF-16(または、00バイトのペアが表示される場合はUTF-32)である可能性があります。
- アラビア文字が1バイトを占める場合、ISO-8859-6である可能性があります(たとえば、شはD5になります)。
- アラビア文字が複数のバイトを占める場合は、UTF-8である可能性があります(たとえば、شはD8 B4になります)。