UTF-8 へのエンコード変換に関して、Windows プラットフォーム間で奇妙な動作が発生しています。商標記号の文字 0x99 のような「拡張 ASCII」文字を含む文字列がある場合、次のコードを使用して Windows 7 で変換できます。
using System.Text;
...
string DefaultEncodedStr = <<Some string with Extended ASCII chars like 0x99 for TM>>
byte[] DefaultEncodedBytes = Encoding.Default.GetBytes(DefaultEncodedStr);
byte[] UTF8EncodedBytes = Encoding.Convert(Encoding.Default, Encoding.UTF8, DefaultEncodedBytes);
char[] UTF8Chars = new char[Encoding.UTF8.GetCharCount(UTF8EncodedBytes, 0, UTF8EncodedBytes.Length)];
UTF8.GetChars(UTF8EncodedBytes, 0, UTF8EncodedBytes.Length, UTF8Chars, 0);
string UTF8Str = new string(UTF8Chars);
ただし、このコードは Windows Server 2008 R2 で最初の文字列を変換できません。「拡張 ASCII」文字が最終文字列にまだ存在しています。
ただし、このコードは Windows Server 2008 R2 でも機能します。
using System.Text;
...
string DefaultEncodedStr = <<Some string with Extended ASCII chars like 0x99 for TM>>
byte[] DefaultEncodedBytes = Encoding.Default.GetBytes(DefaultEncodedStr)
string UTF8Str = Encoding.UTF8.GetString(DefaultEncodedBytes);
しかし、このコードは Windows 7 で文字列を変換できません!!
何を与える?同じカーネル ベース (Win7) を使用しているデスクトップ クラスとサーバー クラスの OS の間で異なる動作が見られるのはなぜですか? エンコーディング変換を適切に処理する方法を決定するために、ある種のプラットフォーム検出コードを含める必要がありますか??