LoginSignup
9
11

More than 5 years have passed since last update.

Java文字コード

Posted at

みなさん文字コードって嫌いですよね。
Java8になってUTF-8がデフォルトになったという話もありましたし、
今更ですが、Javaでの文字コード使用するサンプルを書けたらなと思います。

どのような時に文字コードを意識しないといけないか

まず、どんな時に文字コードを意識する必要があるのか。
それは、自身のJavaアプリケーション以外からインプットがあったりアウトプットがあるときです。

インプットの例

サーバクライアントシステムでのクライアントからの入力データ
CSV等の外部ファイル読み込み

アウトプットの例

サーバクライアントシステムでのサーバからの返却
ファイル書き出し
DB登録

文字コードを使用する処理

ほかにもたくさんあると思いますが、よく使用するものを紹介します。

String.getBytes

文字列をバイト形式で取得する関数です。

"TEST".getBytes(StandardCharsets.UTF_8);

このように、getBytesの引数に文字コードを指定します。こうすることで文字列「TEST」をUTF-8として解釈し、バイト形式に変換できます。
このgetBytes関数は、引数に何も指定しないこともできます。
その場合は、実行環境でのデフォルトの文字コードが使用されます。
その値を確認したい場合は、以下のコードを実行すると確認できます。

System.out.println(System.getProperty("file.encoding"));

デフォルトの文字コードを変更したい場合は、以下のオプションを実行時に指定してください。

-Dfile.encoding=〇〇

Stringのコンストラクタ

Stringのコンストラクタにbyte[]と文字コードを受け取り、指定した文字コードの文字列を取得できます。

byte[] byte1 = "TEST".getBytes(StandardCharsets.UTF_8);
String encorded = new String(byte1, "MS932");

このコンストラクタも文字コードを指定しない場合、実行環境でのデフォルトの文字コードが使用されます。

ファイルの読み込み

ファイルの読み込みにも多くの方法がありますが一つだけ抜粋します。

try {
    BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(""), StandardCharsets.UTF_8);
} catch (IOException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
}

Files.newBufferedReaderで読み込み対象のファイルを指定して、第二引数に文字コードを指定します。
この関数は文字コードの省略が可能で、その場合は、どの環境でもUTF-8となります。(Java8かららしい)
こんな風になっています。

public static BufferedReader newBufferedReader(Path path) throws IOException {
    return newBufferedReader(path, StandardCharsets.UTF_8);
}

最後に

では、本日はここらで終わりたいと思います。
Files.newBufferedReaderはデフォルトがUTF-8、getBytesやStringのコンストラクタは環境によってデフォルト値が変わります。
使用する関数によって、デフォルト値が違うので注意してください。
まぁどんな時でも文字コードは指定すべきだと思いますが。。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11