Javaでプログラミングを行う際、ファイル関連処理などで文字コードを指定する必要があり、エンコードという言葉を聞いたことがある方も多いのではないでしょうか。
本記事では、Javaでのデフォルトエンコーディング確認方法から任意のエンコーディング指定方法まで初心者向けに解説していきます。
目次
エンコードとエンコーディング
エンコード自体の意味合いとしては、データ形式の変換を指します。
文字エンコードは符号化方式によって変換内容が異なるため、文字コードを指定する必要があり、この変換作業を文字エンコーディングと呼んでいます。
文字エンコーディングの種類
文字エンコーディングでは、下記のようなコードが定番で利用されています。
- Shift-JIS
- UTF-8:
- EUC-JP
- Unicode
- ASCII
Javaでデフォルトエンコーディングを確認する方法
Javaでデフォルトエンコーディングを確認するには、「getProperty」メソッド利用することが出来ます。
file.encoding
Javaでは、file.encodingからプロパティを取得することで、開発環境のデフォルトエンコーディングが確認出来ます。
System.getProperty("file.encoding");
サンプル
筆者のMac環境でサンプル出力してみましょう。
public class Main { public static void main(String[] args) { System.out.println(System.getProperty("file.encoding")); } }
出力結果が下記です。
UTF-8
Javaでエンコード指定のファイル書き込み
まずはJavaで文字エンコーディングを指定してファイル書き込み処理を確認していきましょう。
デフォルトエンコーディング
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; public class Main { public static void main(String[] args) { File file = new File("/Users/Shared/sample/default_encode.txt"); try { PrintWriter pw = new PrintWriter(new BufferedWriter (new OutputStreamWriter(new FileOutputStream(file)))); pw.println("ポテパン"); System.out.println("ファイルに書き込みました。"); pw.close(); } catch (Exception ex) { System.out.println(ex); } }
実行すると、コンソールに「ファイルに書き込みました。」と出力され、10行目で指定したパスのファイルに書き込みが実施されます。
今回の場合、文字エンコーディングを指定していないため筆者環境ではデフォルトエンコーディングである「UTF-8」で書き込み処理が行われます。
エンコーディング指定で書き込み
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; public class Main { public static void main(String[] args) { File file = new File("/Users/Shared/sample/shift-jis_encode.txt"); try { PrintWriter pw = new PrintWriter(new BufferedWriter (new OutputStreamWriter(new FileOutputStream(file),"Shift-JIS"))); pw.println("ポテパン"); System.out.println("ファイルに書き込みました。"); pw.close(); } catch (Exception ex) { System.out.println(ex); } } }
14行目で「Shift-JIS」で書き込むように指定しています。
Javaでエンコード指定のファイル読み込み
続いて作成したファイルを読み込んで表示内容を確認してみましょう。
デフォルトでの読み込み
まずはShift-JIS指定で書き込んだファイルを文字エンコーディング指定なしで読み込んでみます。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { File file = new File("/Users/Shared/sample/shift-jis_encode.txt"); try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String text; while ((text = br.readLine()) != null) { System.out.println(text); } br.close(); } catch (Exception ex) { System.out.println(ex); } } }
実行結果が下記です。
�|�e�p��
Shift-JISで作成したファイルを文字エンコーディング指定なしで読み込むと、実行結果のように文字化けして表示されてしまっています。
文字エンコーディング指定での読み込み
同じくShift-JISで作成したファイルを今度は文字エンコーディングをShift-JISに指定して読み込んでみます。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { File file = new File("/Users/Shared/sample/shift-jis_encode.txt"); try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Shift-JIS")); String text; while ((text = br.readLine()) != null) { System.out.println(text); } br.close(); } catch (Exception ex) { System.out.println(ex); } } }
実行結果が下記です。
ポテパン
文字エンコーディングを指定したことにより、エンコード方式が一致して文字化けが解消されています。
さいごに: Javaプログラムで文字エンコードの基本を押さえよう
本記事では、Javaプログラムで意識する必要のある文字エンコードの基本情報についてご紹介してきました。
日本語の場合、様々な文字コードが利用されていることから度々文字化けによる問題が発生するため、Javaプログラマーにとっても文字エンコーディングの知識は最低限押さえておく必要があります。
文字化けが起きた際には今回ご紹介した方法を参考に、適切な文字エンコーディングを指定出来るよう学習を進めていきましょう。
筆者環境では「UTF-8」が出力されましたが、それぞれの環境により出力されるデフォルトエンコーディングは異なる可能性があります。