目次
Javaの文字コードとは
Javaには、プログラムで文字列を正しく表示させるための文字コードがあります。
文字列は、プログラム内部で「byte型配列」の数値で表現されているのですが、このbyte型配列を文字列に変換し、表示させる際の対応関係を文字コードで表すのです。
「Shift_JIS」「UTF-8」「UTF-16」といった文字コードがよく使われます。
そのため、外部ファイルを読み込む際に、ファイルで使用している文字コードを正しく指定しないと文字化けしてしまう場合があります。
文字化けした場合は、ファイルに書かれていた文字がわからない形で表示されてしまうため、注意が必要です。
文字コードのデフォルトがUTF-8か確認しよう
使っている開発環境のデフォルトの文字コードを調べるには、Systemクラスの「getPropertyメソッド」を使いましょう。
getPropertyメソッドは、指定されたキーによって示されるシステム・プロパティを取得するメソッドです。
では実際に、コードを動かしてデフォルトの文字コードを確認しましょう。
記述例は次の通りです。
■記述例 public class Main { public static void main(String[] args) { System.out.println(System.getProperty("file.encoding")); } } ■実行結果 mbp:desktop potepan$ java Main UTF-8
実行結果の通り、デフォルト文字コードが「UTF-8」であるのがわかりました。
Javaの高単価フリーランス案件はこちら
UTF-8の変換について
この章では、文字コードをUTF-8から変換する方法について見ていきましょう。
まず、文字列をUTF-8から文字コードを変換するためにbyte型配列にします。
その際に、「getBytesメソッド」を使いましょう。
getBytesメソッドは、指定された文字セットを使用して、文字列をバイト・シーケンスにエンコード化し、結果を新規バイト配列に格納するメソッドです。
その後、byte型の配列を指定した文字コードで文字列に変換するために、下記の記述をします。
new String(byte型配列, 変換する文字コード)
これで、任意の文字コードに変換可能です。
各文字コードで変換した場合を見ていきましょう。
UTF-8からUTF-16に変換
UTF-8からUTF-16に変換する記述例は、下記の通りです。
■記述例 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { try { String str = "ポテパンスタイル"; // UTF-16に文字コードを指定 byte[] bytes = str.getBytes("UTF-16"); // byte配列で表示 System.out.println("byte配列:" + Arrays.toString(bytes)); // byte配列を文字コード「UTF-16」に変換 String newStr = new String(bytes, "UTF-16"); // 文字コード「UTF-16」で表示 System.out.println("UTF-16:" + newStr); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main byte配列:[-2, -1, 48, -35, 48, -58, 48, -47, 48, -13, 48, -71, 48, -65, 48, -92, 48, -21] UTF-16:ポテパンスタイル
UTF-8からSJISに変換
UTF-8からSJISに変換する記述例は、下記の通りです。
■記述例 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { try { String str = "ポテパンスタイル"; // SJISに文字コードを指定 byte[] bytes = str.getBytes("SJIS"); // byte配列で表示 System.out.println("byte配列:" + Arrays.toString(bytes)); // byte配列を文字コード「SJIS」に変換 String newStr = new String(bytes, "SJIS"); // 文字コード「SJIS」で表示 System.out.println("SJIS:" + newStr); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main byte配列:[-125, 124, -125, 101, -125, 112, -125, -109, -125, 88, -125, 94, -125, 67, -125, -117] SJIS:ポテパンスタイル
UTF-8からMS932に変換
UTF-8からMS932に変換する記述例は、下記の通りです。
■記述例 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { try { String str = "ポテパンスタイル"; // MS932に文字コードを指定 byte[] bytes = str.getBytes("MS932"); // byte配列で表示 System.out.println("byte配列:" + Arrays.toString(bytes)); // byte配列を文字コード「MS932」に変換 String newStr = new String(bytes, "MS932"); // 文字コード「MS932」で表示 System.out.println("MS932:" + newStr); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main byte配列:[-125, 124, -125, 101, -125, 112, -125, -109, -125, 88, -125, 94, -125, 67, -125, -117] MS932:ポテパンスタイル
UTF-8からUnicodeに変換
UTF-8からUnicodeに変換する記述例は、下記の通りです。
■記述例 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { try { String str = "ポテパンスタイル"; // Unicodeに文字コードを指定 byte[] bytes = str.getBytes("Unicode"); // byte配列で表示 System.out.println("byte配列:" + Arrays.toString(bytes)); // byte配列を文字コード「Unicode」に変換 String newStr = new String(bytes, "Unicode"); // 文字コード「Unicode」で表示 System.out.println("Unicode:" + newStr); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main byte配列:[-2, -1, 48, -35, 48, -58, 48, -47, 48, -13, 48, -71, 48, -65, 48, -92, 48, -21] Unicode:ポテパンスタイル
文字コードがUTF-8かの判定方法
Javaの高単価フリーランス案件はこちら
文字コードがUTF-8かどうか判定する方法を見ていきましょう。
文字コードが正しい場合、元の文字列と文字列に変換したbyte型配列の値が等しくなります。
そのため、equalsメソッドを使って両者を比較し、正しければtrue、そうでなければfalseを返すことで判定可能です。
では、実際にコードを動かして確認してみます。
■記述例 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { try { String str = "ポテパンスタイル"; byte[] bytes = { -29, -125, -99, -29, -125, -122, -29, -125, -111, -29, -125, -77, -29, -126, -71, -29, -126, -65, -29, -126, -92, -29, -125, -85 }; System.out.println("文字コード「UTF-8」:" + str.equals(new String(bytes, "UTF-8"))); System.out.println("文字列:" + new String(bytes, "UTF-8")); System.out.println("文字コード「SJIS」:" + str.equals(new String(bytes, "SJIS"))); System.out.println("文字列:" + new String(bytes, "SJIS")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ■実行結果 mbp:desktop potepan$ java Main 文字コード「UTF-8」:true 文字列:ポテパンスタイル 文字コード「SJIS」:false 文字列:繝昴ユ繝代Φ繧ケ繧ソ繧、繝ォ
このように、str変数で指定した「ポテパンスタイル」という文字列は、文字コードがUTF-8であり、SJISではないことが判定できました。
UTF-8でencodingする
コンパイルを行う際に、エンコーディングを指定することも可能です。
その場合は、javacの「-encoding オプション」を使います。
記述方法は次の通りです。
javac -encoding エンコーディング名 ソースファイル名.java
エンコーディング名には、ソースファイルを保存した時のエンコーディングを指定します。
今回の例で言うと「UTF-8」ですね。
javac -encoding UTF-8 Main.java javac -encoding UTF8 Main.java
Javaのフリーランス案件を覗いてみよう
Javaのフリーランス案件は豊富にあり、条件も高いものが多いです。Javaの実務経験が2年以上あればフリーランスになるのも可能です。経験が5年程あれば月単価70万円以上も可能です。Java案件のトレンドが気になる方は、Java案件の単価相場や募集トレンド
をご覧ください。
当メディアを運営するポテパンでJavaフリーランス案件のご紹介もやっておりますので、最新Java案件一覧も是非ご覧ください。
もし、RubyなどのWebエンジニアへの転職を考えている方は、転職に強いポテパンキャンプをご利用くださいませ。