[Java] 日本語をユニコードに変換して、ユニコードから日本語に変換する方法


Devlopment note / Java    作成日付 : 2020/02/26 03:00:00   修正日付 : 2020/02/26 03:00:00

こんにちは。明月です。


この投稿はJavaで日本語をユニコードに変換して、ユニコードから日本語に変換する方法に関する説明です。


Javaのプロパティや様々の設定ファイル、HtmlのJsonコードなどで「\uxxxx」の形のコードを使う時があります。


「\uxxxx」はユニコードですが、英語や数字、つまりasciiコードの以外はユニコードで表示することです。グーグルで検索してユニコードをエンコードまたはデコードするライブラリやソースがありません。

私の検索能力が悪い可能性もありますが、一応私の場合はありませんでした。


先はこのユニコードに関して確認しましょう。

key=\u660E\u6708\u3067\u3059\u3002\u3053\u3093\u306B\u3061\u306F\u3002 this is english.

英語とasciiコードは変換なしでそのまま表示されます。日本語になっている部分は「\u」が付けていて4文字の16進数コードになりました。

6^4+16^3+16^2+16^1の組み立てです。

// ユニコードをStringに変換
public static String convertString(String val) {
  // 変換する文字を格納するバッファに宣言
  StringBuffer sb = new StringBuffer();
  // 文字を一々探索する。
  for (int i = 0; i < val.length(); i++) {
    // 組み立てが「\u」に始まると6文字を読み込む。
    if ('\\' == val.charAt(i) && 'u' == val.charAt(i + 1)) {
      // その後の4文字はユニコードの16進数コードだ。intタイプに変換してcharタイプに強制変換する。
      Character r = (char) Integer.parseInt(val.substring(i + 2, i + 6), 16);
      // 変換する文字をバッファに入れる。
      sb.append(r);
      // forの増加値を5を加算して総6を増加
      i += 5;
    } else {
      // asciiコードならそのままバッファに入れる。
      sb.append(val.charAt(i));
    }
  }
  // 結果をリターン
  return sb.toString();	
}


ユニコードが日本語に変換されてコンソールに表示しました。


また、これをユニコードに変換する関数を作成しましょう。実は私が必要な関数はユニコード変換する関数です。

// Stringからユニコードに変換
private static String convertUnicode(String val) {
  // 変換する文字を格納するバッファ宣言
  StringBuffer sb = new StringBuffer();
  // 文字を一々探索する。
  for (int i = 0; i < val.length(); i++) {
    // 文字抽出をintタイプに持ち込む。
    int code = val.codePointAt(i);
    // 128以下ならasciiコードに変換しない。
    if (code < 128) {
      sb.append(String.format("%c", code));
    } else {
      // 16進数ユニコードに変換する。
      sb.append(String.format("\\u%04x", code));
    }
  }
  // 結果リターン
  return sb.toString();
}
public static void main(String[] args) {
  String val = "key=\\u660E\\u6708\\u3067\\u3059\\u3002\\u3053\\u3093\\u306B\\u3061\\u306F\\u3002 this is english.";
  val = convertString(val);
  System.out.println(val);
  val = convertUnicode(val);
  System.out.println(val);
}


最初、日本語に変換する前のユニコードと同じ結果になりました。eclipseのpropertiesファイルで自動変換する値が出ました。大文字、小文字の差異はありますが、フォーマットは「%04x」から「%04X」にかわれば大文字に変わります。


ここまでJavaで日本語をユニコードに変換して、ユニコードから日本語に変換する方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿