Javaで文字コードを変換する方法【初心者向け】

初心者向けにJavaの文字コードの変換方法について解説しています。文字コードは、文字にあてられた数値のことです。ファイル読み込みの際に文字コードが一致しないと文字化けが起こるという不具合が発生します。文字コードの変換方法を実際に書きながら学習しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

この記事では、Javaの文字コードの変換方法について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

文字コードの変換方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

文字コードとは

コンピュータではすべての文字に対してコード(数値)が割り当てられています。

Javaの内部ではUTF-16という文字エンコーディングが使われており、例えば「3042」という文字コードは平仮名一文字の「あ」に、「3044」という文字コードは「い」に変換されます。

Javaでファイル読込を行う際、読み込むファイルの文字コードが別の文字コードだと読み込んだ時に文字化けしてしまいます。

この為、読み込むファイルの文字コードを指定し、読み込み時に変換を行う必要があります。

ファイル読込を実装する方法は多数ありますが、今回は文字コードはFileInputStream、InputStreamReader、BufferedReaderの3つのクラスを使って実装する方法の中で、文字コードの変換を行います。

 

文字コードの変換方法

文字コードの変換は、InputStreamReaderのインスタンスを作成する際に、コンストラクタの第二引数で文字コードを指定して行います。

 

[PR] Javaで挫折しない学習方法を動画で公開中

実際に書いてみよう

読み込み用のファイルを作成します。mojicode.txtというテキストファイルを作成し、内容を入力して保存します。内容はなんでもかまいません。保存の際に文字コードを選択して保存します。

今回はJISを選択しました。

ソースコード

public static void main(String[] args) {

  //ファイル読み込みで使用する3つのクラス
  FileInputStream fi = null;
  InputStreamReader is = null;
  BufferedReader br = null;

  try {

    //インスタンス生成
    //読み込みファイルのパスを記載する
    fi = new FileInputStream("mojicode.txt");

 

    //第二引数で読み込みファイルを保存した際に選択した文字コードを指定する
    is = new InputStreamReader(fi, "JIS");
    br = new BufferedReader(is);

    String tmp;

    //1行ずつ読み込み、出力する
    while ((tmp = br.readLine()) != null) {

      System.out.println(tmp);

    }

  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      br.close();
    } catch (Exception e) {
      e.printStackTrace();
    }

  }
}

実行し、作成したファイルの内容が正しく表示できていることを確認しましょう。

 

監修してくれたメンター

長屋雅美

独立系SIerで7年勤務後、現在はフリーのエンジニアとして自宅をオフィスとして活動しています。
JavaやC♯、shellscriptを用いた開発を主に担当し、TechAcademyではJavaコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。