logo

Java 文字列エンコーディング

Java で何かを扱うとき、 場合によっては、文字列を特定の文字セットでエンコードすることが必要になることがあります。 エンコーディング データをある形式から別の形式に変換する方法です。文字列オブジェクトは UTF-16 エンコーディングを使用します。 UTF-16 の問題は、変更できないことです。異なるエンコーディングを取得する方法は 1 つだけあり、それは byte[] 配列です。予期せぬデータが得られた場合、エンコード方法が適切ではありません。このセクションでは、次のことを学びます 文字列をエンコードする方法 ジャワ

注: UTF-8 で文字列をエンコードすることはできません。したがって、ByteBuffer を使用するか、ByteBuffer の配列を呼び出して byte[] を取得します。

このセクションに進む前に、文字エンコーディングについて理解する必要があります。早速見てみましょう。理解しましょう なぜ文字列をエンコードする必要があるのか

文字コード テキストデータを2進数に変換する技術です。特定の文字に一意の数値を割り当て、それらの数値をバイナリ言語に変換できます。これらの 2 進数は、後でその値に基づいて元の文字に変換できます。

ネットワークオペレーティングシステム

問題

ドイツ語の文字列があるとします。 さよなら そしてそれをエンコードする必要があります。次のコード スニペットを考えてみましょう。

 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

US_ASCII を使用して文字列をエンコードすると、次のようになります。 さよなら US_ASCII エンコーディングは非 ASCII 文字 ( あなた )。 ASCII エンコードされた文字列を UTF-8 に変換すると、同じ文字列が得られます。

 String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str); 

byte[] 配列に非 Unicode テキストが含まれている場合、次のようにテキストを Unicode に変換できます。 コンストラクタ。逆に、次のコマンドを使用して、String オブジェクトを非 Unicode 文字の byte[] 配列に変換することもできます。 String.getBytes() 方法。を使用して文字列をエンコードしましょう getBytes() 方法。

String.getBytes() メソッドの使用

ジャワ クラス を提供します getBytes() メソッド 文字列を UTF-8 にエンコードするために使用されます。このメソッドは文字列をバイトのシーケンスに変換し、結果を配列に格納します。

構文:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

charsetName をパラメータとして解析し、バイト配列を返します。それは、 UnsupportedEncodingException 指定された文字セットがサポートされていない場合。

文字列を UTF-8 エンコーディングに変換する Java プログラムを作成してみましょう。

StringEncodingExample.java

 public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } } 

出力:

 Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100 

StandardCharsets クラスの使用

StandardCharset クラスを使用して文字列をエンコードすることもできます。文字列をエンコードするには 2 つの手順があります。まず、文字列をバイトにデコードしてから、UTF-8 にエンコードします。たとえば、次のコードを考えてみましょう。

無限ループ
 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

文字列をエンコードするもう 1 つの方法は、Base64 エンコードを使用することです。 Base64 エンコードとデコードについては次のセクションで説明します。