どのバイト配列も文字列に変換できますか? または、文字列のエンコーディングによっては、使用できない、または文字に変換できないバイト値がいくつかありますか?
3 に答える
バイト配列がテキストとして開始された場合にのみ、バイト配列を文字列に変換しようとする必要があります。バイト配列が実際に画像ファイルやビデオのコンテンツである場合、またはエンコードまたは圧縮されたデータである場合は、エンコーディングを使用して直接文字列に変換しようとしないでください。そうすることは、ほとんどの場合、最終的にうまくいきません。ISO-8859-1 では大丈夫かもしれませんが、それは基本的に悪い考えであり、実際に行うべきではありません。
代わりに、を使用Convert.ToBase64String
してBase64に変換するか、代わりに 16 進数に変換する必要があります。
Base64 を使用する場合はConvert.FromBase64String
、テキストからバイト配列に戻すために使用します。
どのバイト配列も文字列に変換できますか?
Base64
バイト配列の適切な表現のようです:
byte[] buffer = ...
string base64 = Convert.ToBase64String(buffer);
.NET では、ToBase64String
メソッドを使用してこれを実現できます。
また、質問で文字列のエンコードについて話しているようですが、.NET ではすべての文字列が UTF-16 でエンコードされているため、その意味がよくわかりません。
文字列は、さまざまなエンコーディングを使用して一連のバイトに変換できます。一部のエンコーディングは、可能な文字列を何らかのバイト シーケンスに変換できます。他のものは、限られた種類の文字を含む文字列でのみ機能しますが、可能なすべてのバイトシーケンスに対して、それを生成する文字列が存在します. 一部のエンコーディング メソッドは、考えられる文字列を偶数長のバイト シーケンスに変換し、偶数長のバイト シーケンスを文字列に戻すことを許可しますが、奇数長の文字列を生成することはできません。考えられるすべての文字列と考えられるすべての任意長のバイト シーケンスとの間に 1 対 1 の関係を作成するエンコード方法については知りません。
むかしむかし、文字列は任意のバイト シーケンスを保持する便利な方法でしたが、.NET では、無効な文字が含まれないようにデータがフィルター処理されている場合にのみ、バイナリ データを保持する手段として使用できます。またはシーケンス。文字列で提供されていたその目的に使用できる「不変のバイトシーケンス」タイプがあればいいのにと思いますが、私はそれを知りません。