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の違い
関連の記事