2017-12-23 4 views
0

私は削除0x00の上位バイトを、持っていた知っているバイトの配列として表された文字列を持っているような文字列が圧縮されていること:圧縮された(上位バイトを削除した)バイトをUnicode文字列に変換する方法は?

0x43 0x6F 0x6D 0x6D 0x61 0x6E 0x64 //"Command" 

がどのように私はUnicodeにバイトを変換することができます文字列?

byte[] compressedBytes = br.ReadBytes(stringLength); 
byte[] uncompressedBytes = new byte[stringLength * 2]; 
for (int byteCounter = 0; byteCounter < stringLength; byteCounter++) 
{ 
    uncompressedBytes[byteCounter * 2] = compressedBytes[byteCounter]; 
} 
return Encoding.Unicode.GetString(uncompressedBytes); 

またはすべてのバイトを扱いますエンコーディングがある:

私は毎秒間隔で、2倍のサイズとなる新しい配列(uncompressedBytes)にバイトをコピーする必要が推測しています上位バイトが欠落しているUnicode文字として表示されますか?

答えて

3

最初の256コードポイントは、既存の西洋テキストを変換するのが簡単になるように、ISO-8859-1の内容と同じにしました。

https://en.m.wikipedia.org/wiki/Unicode

Encoding.GetEncoding("ISO-8859-1").GetString(bytes) 
2

すべてのバイトが0x7f以下であることがわかっている場合は、それらをutf-8として扱い、System.Text.UTF8Encodingコンバータクラスを使用できます。

+0

残念ながら、私は*すべてのバイトが0x7fの以下であること*知りません。 – ThunderFrame

+0

より大きいUnicode値の上位バイトを削除すると、データが破損します。 Unicodeには圧縮はなく、確かにバイトを切り捨てるものはありません。したがって、すべてのバイトが0x7F以下であれば、UTF-8と互換性のあるASCIIを使用できます。 0x80-0xFFの間にバイトがある場合は、ANSI、おそらくISO-8859-1、おそらくWindows-1252またはその他のエンコーディングも扱っています –

関連する問題