Encoding.ASCII
度記号をまったく含まない標準の 7 ビット ASCII エンコーディング用です。ASCII で度記号を取得するには、多くの 8 ビット ASCII エンコーディングのいずれかを使用する必要があります。英語の場合、ISO 8859-1 コード ページの使用におそらく最も関心があるでしょう。これは、最も標準的なコード ページです。たとえば、 を使用する代わりに、次のEncoding.ASCII
ようにすることもできます。
Using OutFile As New StreamWriter(fName, False, Text.Encoding.GetEncoding("iso-8859-1"))
OutFile.Write(txt)
End Using
使用可能なエンコーディングの完全なリストについては、メソッドを使用するか、 MSDN ドキュメントEncoding.GetEncodings
でサポートされているエンコーディングのリストを参照してください。
もちろん、さまざまな 8 ビット ASCII エンコーディングは相互に互換性がないため、それを使用すると、デフォルトで別のコード ページを使用するシステムで表示すると、度記号はまったく別の記号になります。それこそが、UTF-8 が新しい標準になった理由です。8 ビット ASCII の使用は、多文化シナリオでは実質的に機能しないため、広く推奨されていません。代わりに UTF-8 を使用できる場合は、そうします。ASCII を使用する必要がある場合は、標準の 7 ビット エンコーディングを使用することをお勧めします。8 ビット ASCII エンコーディングを使用する必要がある場合は、その欠点を十分に認識して慎重に行ってください。
もう一つ。目的のターゲットエンコーディングで度記号を文字 167 (0xA7) として言及します。その場合、実際には ISO 8859-1 ではなく IBM437 エンコーディングが必要な場合があります。IBM437 は、MS-DOS でデフォルトで使用されていた古いコード ページです。そのコード ページを本当に使用する必要がある場合は、2 つの理由でさらに問題が発生する可能性があります。MSDN の記事でわかるように、そのコード ページは .NET フレームワークでは十分にサポートされていません。私のテストでは、そのエンコーディングを使用して度記号を含む Unicode 文字列を出力すると、正しく動作しませんでした。String
したがって、変数 (Unicode) ではなくバイト配列を使用してデータを表す必要がある場合があります。例えば:
File.WriteAllBytes("Test.txt", {167})
2 番目の問題は、IBM437 が Windows OS のデフォルトのコード ページではない可能性が高いため、バイト値 167 としてファイルに書き込まれた場合でも、Windows アプリケーションで表示すると、実際には度記号のように見えないことです。メモ帳など。