バナー画像

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」であるのがわかりました。

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かの判定方法

文字コードが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

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。