のはなぜですか.NETフレームワークStreamReader/ライターのデフォルトはutf-8エンコード?
-
21-08-2019 - |
質問
私は見ているだけで、コンストラクタのためのStreamReader/ライターいる場合がございますのでご了承UTF8を利用してデフォルトです。誰も知らなぜです。この推定ではないでしょうかより安全なベットのデフォルトにUnicodeで扱います。
解決
UTF-8は、任意のASCII文書で動作し、通常はUTF-16よりもコンパクトであるだろう - しかし、それはまだユニコードの全体をカバーしています。私は、UTF-8がUTF-16よりものはるかの、より一般的だと思います。 (何のBOMおよび指定された明示的なエンコードがありませんとき)また、XMLのデフォルトです。
なぜあなたはそれをUTF-16にデフォルト設定する方が良いだろうと思いますか? (それはEncoding.Unicode
があるものです。)
編集:私はあなたがUTF-8を扱うことができる、まさに混乱している疑いがあります。 このページは方法など、かなり明確に説明しますいずれかの特定のUnicode文字が符号化されます。これは、マルチバイト文字だが、それは、Unicodeの全体をカバーしています。
他のヒント
UTF8の のユニコード、ユニコードコードタイプの、より具体的には一つである。
さらに重要なのはASCIIとの後方互換性、それに加えてXMLの標準的なデフォルトだとHTML
、UTF-8は、Unicode内符号化規格です。 UTF-8が存在するすべてのUnicode文字をエンコードするために可変数のバイトを使用します。
すべてのASCII文字は、ASCIIファイルは今さらに騒ぎで読み取ることができるようなものであるとして表現されています。できるだけ早くストリームにおけるバイトとしての8番目のビット(最上位ビット、> 127)セットを有し、これはすなわち、<128になるまで、次のバイトとそれを結合するリーダーをトリガします。組み合わせは、その後1つの文字とみなされます。
2つの文字を使用して符号化されるLATIN-1(ANSII)の文字があります。例えばEはEおよび 'としてエンコードされています。 (E '')の長さは、従って、2である。
Windowsは決してすべてUnicde文字で64K、にエンコード可能な文字を制限する、内部的にUTF-16を使用しています。 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を使用して想像してみてください。これらは、(テキストファイル用)ダブルまたはサイズでquadrouple ASCIIとUTF-8(UTF-8、ASCII文字のみが使用されている場合)と比較してしまいます。 UTF-8であっても、将来の拡張のために、Unicode標準のすべての文字を許容するだけでなく、スペースも同様に効率的にそれを保存します。
通常、ファイルの最初の2バイト、BOMまたはバイトオーダーマーカーは、使用されるエンコーディング標準、あなたを伝えます。省略した場合、あなたが見つけたとして、XMLとStreamRedaerは、UTF-8を使用します。 ASCIIファイルはBOMを持っていないため、ほとんどの場合、正しく読み込まれるように、これは、再び、ローミングサービスになります。これは、LATIN-1のすべてを使用してファイルに対して真ではないかもしれません。