2017-07-12 5 views
0

これはどこかで答えられている場合は謝罪しますが、もしあれば、私はそれを見つけることができませんでした。一貫性のあるバイトの無効な文字の表現

私はバイト配列でいくつかの操作をしており、無効な文字(たとえば0x9Cバイト)を変換するときに "?"と解釈されることに気づいています。したがって、それをバイトに変換すると、0x3Fとして出力されます。

私の問題は、バイト配列の一部はASCIIですが、他のものはこのような無効な文字を含む可能性のあるチェックサムです。私は便利なために文字列に配列全体を変換することができるようにしたいと思います。通常の文字に対してASCIIを生成するエンコーディングがあり、無効な文字を文字列に変換して戻すと同じバイトが生成されることを確認しますか?

答えて

0

他人のために働くが、私は見られないこと

System.Text.Encoding.Default.GetString(...) 

およびその他のエンコーディングに反対に変更されるバイト配列内の値を防ぐよう

System.Text.Encoding.Default.GetBytes(...) 

を使用して、「?」 ASCII文字は依然として正しく解釈されていました。

+0

無効なデータを取得する可能性のある値があります。 byte []を文字列として表現する必要があるなら、 'Convert.ToBase64String(' 'Convert.FromBase64String(' 'また、' 'System.Text.Encoding.Default'はコンピュータ間でデータを送信する予定です。システムとは異なります。チェックサムを取って自分のバイト[]にして、それらのbase64テキストを文字列の最後に追加してください。 –

+0

デフォルトはマシン、ユーザー、時間によって異なります。質問に記載されている前後変換のコンテキストを操作する機会があります。 –

+0

追加する必要があります。私のマシンのデフォルトがSystem.Text.Encoding.SBCSCodePageEncodingであることがわかりました。まだ無効なデータが残っている可能性がありますが、それまでは正常に動作しています – Cobalt

0

「通常の文字」の意味は不明ですが、0-255の任意のバイト値の任意のシーケンスをデコードできるエンコードを求めています。 1つのコード単位ですべてのコードポイントをエンコードし、.NET Base Class Librariesにあり、文字セットをUnicodeのサブセットにする必要があります。

ISO 8859-1およびCP437は、これらの要件を満たす2つです。 Unicodeでは、あなたの "普通の文字"を "通常の文字"にマップするかどうかを確認することができます。 (ヒント:ISO 8859-1には、C0 Control and Basic Latin、C1コントロール、Latin-1補足ブロックと同じ文字が使用されています)

ご存知ですか?データフォーマットの領域は、他の文字エンコーディング?

関連する問題