StreamReader / Writerのコンストラクターを見ているだけで、デフォルトでUTF8を使用していることに注意してください。なぜこれなのか誰もが知っていますか?Unicodeをデフォルトにする方が安全だと思いました。
4 に答える
UTF-8は任意のASCIIドキュメントで動作し、通常はUTF-16よりもコンパクトですが、それでもUnicode全体をカバーします。UTF-8はUTF-16よりもはるかに一般的だと思います。これはXMLのデフォルトでもあります(BOMが指定されておらず、明示的なエンコードが指定されていない場合)。
なぜデフォルトでUTF-16を使用したほうがよいと思いますか?(それが何ですかEncoding.Unicode
。)
編集:UTF-8が正確に何を処理できるかについてあなたが混乱しているのではないかと思います。このページでは、特定のUnicode文字がどのようにエンコードされているかなど、非常に明確に説明しています。これは可変幅エンコーディングですが、Unicode全体をカバーしています。
UTF8はUnicodeであり、より具体的にはUnicodeエンコーディングタイプの1つです。
さらに重要なのは、ASCIIとの下位互換性に加えて、XMLおよびHTMLの標準のデフォルトです。
他のすべてがすでに述べたように、UTF-8はUnicode内のエンコーディング標準です。UTF-8は可変バイト数を使用して、存在するすべてのUnicode文字をエンコードします。
すべてのASCII文字はそのまま表示されるため、ASCIIファイルをさらに面倒に読むことができます。ストリーム内のバイトの8番目のビット(最上位ビット、> 127)が設定されるとすぐに、リーダーはそれが128未満になるまで次のバイトと結合するようにトリガーされます。その場合、組み合わせは1文字と見なされます。
LATIN-1(ANSII)には、2つの文字を使用してエンコードされた文字があります。たとえば、éはeおよび´としてエンコードされます。したがって、Length('é')は2です。
Windowsは内部でUTF-16を使用します。これにより、エンコード可能な文字が64Kに制限されます。これは、すべてのUnicde文字ではありません。現時点では、UTF-32はすべての文字を許可しますが、人為的に制限されています。また、先行ゼロがあるため、どちらもASCIIと上位互換性がありません。
A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041
エンディアンエンコーディングもほとんどありません。
A = UTF-16 big endian h0041 = UTF-16 little endian h4100
UTF16またはUTF32を使用してファイルを保存することを想像してみてください。それらは(テキストファイルの場合)ASCIIおよびUTF-8(ascii文字のみが使用されている場合はUTF-8)と比較してサイズが2倍または4倍になります。UTF-8は、将来の拡張に対しても、Unicode標準のすべての文字を許可するだけでなく、スペースを効率的に節約します。
通常、ファイルの最初の2バイトであるBOMまたはバイトオーダーマーカーは、どのエンコーディング標準が使用されているかを示します。ご存知のように、省略した場合、XMLとStreamRedaerはUTF-8を使用します。ASCIIファイルにはBOMがなく、ほとんどの場合正しく読み取られるため、これも意味があります。これは、すべてのLATIN-1を使用するファイルには当てはまらない場合があります。