5

印刷できない文字を含むバイト配列をアプリケーションの文字列に変換したいと考えています。ASCII/Unicode/UTF8 が常に正しい解決策を提供するとは限らないことがわかったので、バイト配列に変換し直すと、配列の内容は同じままである必要があります。

例えば

 byte[] bytearray ={ 147, 35, 44, 18, 255, 104, 206, 72 ,69};

 string str = System.Text.Encoding.ASCII.GetString(bytearray);

 bytearray = System.Text.Encoding.ASCII.GetBytes(str);

上記の例では、バイト配列に含まれていることがわかりました

{ 63, 35, 44, 18, 63, 104, 63, 72 ,69}.

親切に私を助けてください。

4

4 に答える 4

8

Convert.ToBase64Stringメソッドを見てください。バイト配列を文字列に変換します。データが文字列にエンコードされると、元のバイト配列よりも多くのスペースが必要になることに注意してください。

public static string ToBase64String(
    byte[] inArray
)

次に、文字列をデコードしてバイト配列に戻すことができますFromBase64String

public static byte[] FromBase64String(
    string s
)
于 2011-11-04T12:36:30.630 に答える
1

あなたの問題は、間違ったエンコーディングを使用していることだと思います。ASCII は 128 文字 (http://en.wikipedia.org/wiki/ASCII) を定義するため、128 バイトを超えることはありません。

正しいエンコーディングを見つけて、帰りの旅行が成功すると予想される場合はそれを使用する必要があります。

私はそれが思われる質問を読み違えました。私の答えは、バイト配列がエンコードされた文字列である場合にのみ関連していました-印刷できない文字などであると述べたビットを読んでいませんでした.Nikolaの答えは、行くべきものです. :)

于 2011-11-04T12:37:19.003 に答える
0

ASCII はすべての印刷不可能な文字を ? に変更するため、別のエンコーディング ベースを使用します。63歳です。

文字列が、prontable chars の人間が読めるバージョンである必要がない場合、実際にそれを base64 (UUEncode/XXEncode) に変換すると、実際にうまくいきます。

于 2011-11-04T12:35:30.297 に答える
0

ASCI エンコーディングを使用してバイト配列を文字列に変換します。ASCI は 7 ビット プロトコルであることを思い出してください。エンコーディングは 8 番目のビットを削除するか、特定の値にフォールバックします (ドキュメントでは、どちらを行うかは不明です!)

MSDN を引用します。

.NET Framework バージョン 2.0 より前の .NET Framework では、8 番目のビットを無視することでなりすましが許可されていました。.NET Framework 2.0 以降、非 ASCII コード ポイントはデコード中にフォールバックします。

于 2011-11-04T12:40:35.027 に答える