みなさん文字コードって嫌いですよね。
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のコンストラクタは環境によってデフォルト値が変わります。
使用する関数によって、デフォルト値が違うので注意してください。
まぁどんな時でも文字コードは指定すべきだと思いますが。。