Java バイト配列の作成と復号のサンプル(getBytes)

Javaのバイト配列の作成と復号のサンプルです。
(確認環境:Java8)

目次

サンプル 文字列からバイト配列を作成する(UTF8)
  文字列からバイト配列を作成する(MS932)
  バイト配列を復号して文字列を作成する(UTF8とMS932)
  Shift_JISとMS932とWindows-31Jの違い

文字列からバイト配列を作成する(UTF8)

public byte[] getBytes(Charset charset)
  • getBytesメソッドは、文字列をバイト配列にします。
  • 引数は、Charset型で文字コードを指定するため、try~catchは不要です。
  • バイト配列は、データ型がバイト(byte)型で値が-128~127までの数値です。
package test1;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Test1 {
	public static void main(String[] args) {
		Charset charset = StandardCharsets.UTF_8;
		String str1 = "あA1";

		// 文字列をバイト配列に変換
		byte[] ar1 = str1.getBytes(charset);
		for (byte b1 : ar1) {
			System.out.println(b1);
			// -29 -127 -126 65 49
		}
	}
}

11行目は、getBytesメソッドで文字列をバイト配列にしています。
getBytesメソッドの引数は、StandardCharsetsクラスのUTF_8を指定しているのでtry~catchは不要です。

以下はJava8 API仕様のgetBytesメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#getBytes-java.nio.charset.Charset-

文字列からバイト配列を作成する(MS932)

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
  • getBytesメソッドは、文字列をバイト配列にします。
  • 引数は、String型の文字コードを指定します。
  • 引数に想定外の値が指定される可能性があるため、try~catchが必要です。
  • バイト配列は、データ型がバイト(byte)型で値が-128~127までの数値です。
package test1;
import java.io.UnsupportedEncodingException;

public class Test1 {
	public static void main(String[] args) {
		String str1 = "あA1";

		try {
			// 文字列をバイト配列に変換
			byte[] ar1 = str1.getBytes("MS932");
			for (byte b1 : ar1) {
				System.out.println(b1);
				// -126 -96 65 49
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

10行目は、getBytesメソッドで文字列をバイト配列にしています。
getBytesメソッドの引数にStringの文字列を指定する場合はtry~catchが必要です。

以下はJava8 API仕様のgetBytesメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#getBytes-java.lang.String-

 

バイト配列を復号して文字列を作成する(UTF8とMS932)

public String(byte[ ] bytes, Charset charset)
public String((byte[] bytes,String charsetName) throws UnsupportedEncodingException
  • Stringクラスのコンストラクタでバイト配列を復号し新しいStringを生成します。
  • 1つめの引数はバイト配列で2つめの引数は、復号で使用する文字コードです。
  • バイト配列とは、データ型がバイト(byte)型で値が-128~127までの配列です。
package test1;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class Test1 {
	public static void main(String[] args) {
		Charset charset = StandardCharsets.UTF_8;
		byte[] b1 = { -29, -127, -126, 65, 49 };
		// バイト配列を文字列に変換
		String str1 = new String(b1, charset); // UTF-8
		System.out.println(str1); // あA1

		String str2;
		byte[] b2 = { -126, -96, 65, 49 };
		try {
			// バイト配列を文字列に変換
			str2 = new String(b2, "MS932"); // MS932
			System.out.println(str2); // あA1
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}

Stringクラスのコンストラクタでバイト配列を復号し新しいStringを生成しています。
引数の文字コードにStringの文字列を指定する場合は、try~catchが必要です。

以下はJava8 API仕様のStringクラスのコンストラクタのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#String-byte:A-java.nio.charset.Charset-

Shift_JISとMS932とWindows-31Jの違い

  • MS932は、①や㍉や㈱などのNEC特殊文字と髙(はしごだか)などのIBM拡張文字があります。(+NEC選定IBM拡張文字)
  • Windows-31JはMS932の別名で同じです。
  • Shift-JISには、NEC特殊文字とIBM拡張文字とNEC選定IBM拡張文字は入っていないので注意が必要です。
  • Java MS932とShift_JISの違い

関連の記事

Java Base64のエンコードとデコードのサンプル

△上に戻る