記事のターゲット
- Javaで文字コードをUTF-8以外にしたい人
前提
現在、大体のところで使用されている文字コードはUTF-8なのですが、一昔前のシステムや外部ファイルへの書き出しでは別の文字コードが使わていることが多々あります。
そういったとき、文字コードに差異が生じると文字化けが発生します。全部の文字化けを統一すれば解決するのですが、今回はその都度修正できる書き方を紹介します。
方法
今回はSJISとの間でよく文字化けする全角ハイフンで試していきます。
//現環境のEclipseで指定されている文字コードを調べる
System.out.println(System.getProperty("file.encoding"));
//文字化けしやすい全角ハイフン
String before = "ー";
//もともとの文字コードでは問題なく出力できる
System.out.println(before);
//全角ハイフンをSJISのバイト列に変換
byte[] change = before.getBytes("SJIS");
//変換後のバイト列と文字コードを指定して文字列をnewする
System.out.println(new String(change, "SJIS"));
//SJISに変換したバイト列をUTF-8で表示すると文字化けが起こる
System.out.println(new String(change, "UTF-8"));
実行結果
UTF-8
ー
ー
�[
コード | 説明 |
---|---|
System.getProperty("file.encoding") | 現在の文字コードを取得 |
byte[] change = before.getBytes("???"); | before部分の文字列を?部分に指定した文字コードのバイト配列に変換する |
new String(change, "SJIS") | 文字列を初期化するときに文字コードを第二引数で指定することでその文字コードで文字列を生成できる |
まとめ
流れとしては、もともとUTF-8で生成されたハイフンを一旦SJIS型のバイト列に変換(文字は番号で管理されている)し、新たにSJIS型の文字列として生成しています。
文字コードを指定している部分を他のものに変えれば応用が利きますのでぜひ試してみてください。
ちなみに一度SJISに変換したものを最後にUTF-8で出力していますが、文字コードが違っているので文字化けが起こっています。