18

bytesの配列を変換せずに変換するにはどうすればよいですStringか?

私は試した:

  String doc=new String( bytes);

ただし、doc ファイルはバイトと同じではありません (バイトはバイナリ情報です)。例えば:

  String doc=new String( bytes);
  byte[] bytes2=doc.getBytes();

bytesbytes2は異なります。

PS: UTF-8 は一部のバイトを異なる値に変換するため機能しません。テストしましたが、動作しません。

PS2: いいえ、私はしたくありませんBASE64

4

3 に答える 3

16

UTF-8など、必要なエンコーディングを指定する必要があります

String doc = ....
byte[] bytes = doc.getBytes("UTF-8");
String doc2 = new String(bytes, "UTF-8");

docdoc2同じになります。

をデコードするには、byte[]正しくデコードされることを確認するために、どのエンコーディングが使用されたかを知る必要があります。

于 2013-07-10T15:39:32.383 に答える
14

バイト配列を a に変換し、String元に戻す1 つの方法を次に示します。

String doc=new String(bytes, "ISO-8859-1");
byte[] bytes2=doc.getBytes("ISO-8859-1");

AStringは一連の文字であるため、何らかの方法でバイトを文字としてエンコードする必要があります。エンコーディングは各バイトに単一のISO-8859-1一意の文字をマップするため、変換に安全に使用できます。などの他のエンコーディングはUTF-8、この意味では安全ではないことに注意してください。これらのエンコーディングでは、有効な文字列にマップされないバイト シーケンスがあるためです。

于 2013-07-10T15:39:03.760 に答える
1

byte[] と String の間の「適切な変換」は、使用するエンコーディングを明示的に指定することです。byte[] で開始し、実際にはテキスト データが含まれていない場合、「適切な変換」は行われません。文字列はテキスト用で、byte[] はバイナリ データ用です。本当に賢明なことは、絶対に必要でない限り、それらの間の変換を避けることです。

バイナリ データを保持するために本当に String を使用する必要がある場合、最も安全な方法はBase64エンコーディングを使用することです。

ソース:Michael Borgwardt

于 2013-07-10T15:39:04.707 に答える