Javaプログラムから文字列をnative2asciiしてみた

こんにちは、さるまりんです。

プロパティファイルに日本語等の文字を含む場合、native2asciiを使ってUnicodeエスケープします。

これをJavaプログラムでできないかやってみました。

作ってみたのは文字列をUnicodeエスケープするメソッド(クラス)です。

Native2Ascii.java

public class Native2Ascii {

    // ASCII文字のコードの最大値
    private static final int MAX_ASCII = 127;

    /**
     * 文字列をnative2ascii変換します
     */
    public String native2ascii(String str) {
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray()) {
            if (c <= MAX_ASCII) {
                // これはASCII文字なので変換の必要なし
                sb.append(c);
            } else {
                // 変換します
                String hex = String.format("\\u%04x", c & 0xffff);
                sb.append(hex);
            }
        }
        return sb.toString();
    }
}

文字を一文字ずつとり、変換の必要がなければそのまま、必要があれば\uxxxxに置き換えています。

実際に呼び出してみます。

public static void main(String[] args) {
    String line = "message.greeting=こんにちは、世界。";
    System.out.println(new Native2Ascii().native2ascii(line));
}

この実行結果はこんな感じです。

message.greeting=\u3053\u3093\u306b\u3061\u306f\u3001\u4e16\u754c\u3002

必要な箇所は変換されてますね。

メッセージの元が入ってるスプレッドシートをもらいまして、それをプロパティファイルにしなければいけなかったのですが、手でやると抜けが発生しそうだなと思い、今回このメソッドを作ってみました。
統合開発環境にこれをしてくれるプラグインもありますが、今回はちょっと加工したりしなければいけなかったためプログラムで。

プログラムにやってもらって正確に楽ができる方法をこれからも探していきたいと思います。

読んでくださってありがとうございました。

それではまた!