logo

Javaでバイト配列を文字列に変換する方法

バイト配列を String に変換するプロセスは、デコードと呼ばれます。このプロセスには文字セットが必要です。ただし、charset を使用する必要があります。 デコード バイト配列。

バイト配列を文字列に変換するには 2 つの方法があります。

  • を使用することで 文字列クラスのコンストラクター
  • を使用することで UTF-8エンコーディング

Stringクラスコンストラクターを使用する

バイト配列を String に変換する最も簡単な方法は、コンストラクター引数として byte[] を指定して String クラス コンストラクターを使用することです。

 String str=new String(bytes); 

次の例では、文字エンコーディングを使用しません。

 public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } } 

出力:

Javaでバイト配列を文字列に変換する方法

UTF-8エンコーディングを使用する

バイト配列を String に変換するときは、文字エンコーディングを覚えておいてください。 bytes はバイナリ データであるのに対し、String は文字データであるためです。バイト配列の作成元となったテキストの元のエンコーディングを知ることが重要です。異なる文字エンコーディングを使用すると、元の文字列は返されません。

Linuxのエクスポートとは何ですか

' でエンコードされたファイルからバイト配列を読み取る必要があるとします。 ISO_8859_1 '。バイト配列を文字列に変換する際の文字エンコーディングはありません。 String クラスのコンストラクターを使用してバイト配列を String に変換しますが、同じテキストが返されるという保証はありません。これは、String クラスのコンストラクターがプラットフォームのデフォルトのエンコーディングを使用するためです。

バイトは 8 ビットを保持し、最大 256 個の個別の値を持つことができます。これは、7 ビットのみが使用される ASCII 文字セットで機能します。文字セットに 256 を超える値がある場合は、文字をバイト シーケンスにエンコードする方法を示すエンコードを明示的に指定する必要があります。

Java プラットフォームでサポートされている文字セットは次のとおりです。

  • StandardCharsets.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

正確なエンコーディングを覚えていない場合、プラットフォームはそれらの特殊文字を適切に変換できません。この問題は、「」を提供することで解決されます。 UTF-8 ' を文字エンコーディングとして使用します。 Java は、文字エンコーディングを受け入れる別のオーバーロードされたコンストラクターを String クラスに提供します。

 new String(byte[], 'character encoding'); 

次の例では、 StandardCharset.UTF_8 エンコーディングを指定します。

 import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } } 

出力:

Javaでバイト配列を文字列に変換する方法

次の例では、バイト配列の作成中に char を取得しています。オートボクシングのおかげで機能します。文字「T」はバイト配列などで 84 に変換されます。そのため、両方のバイト配列の出力は同じになります。

 public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } } 

出力:

Javaでバイト配列を文字列に変換する方法

String クラスには、バイト配列と Charset を引数として渡すことができるコンストラクターもあります。したがって、次のステートメントを使用して、Java でバイト配列を String に変換することもできます。

int を文字列化する
 String str = new String(byteArray, StandardCharsets.UTF_8) 

String クラスには、バイト配列のサブセットを String に変換するコンストラクターもあります。

 String(byte[] bytes, int offset, int length, String charsetName) 

別のエンコーディングが使用される別の例を見てみましょう。

 import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } } 

出力:

Javaでバイト配列を文字列に変換する方法