[Java] 日本語をユニコードに変換して、ユニコードから日本語に変換する方法
こんにちは。明月です。
この投稿は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で日本語をユニコードに変換して、ユニコードから日本語に変換する方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
「Devlopment note / Java」の他投稿
- [Java] Jsonタイプのデータを使う方法(Gsonライブラリ)2020/03/11 00:30:15
- [Java] Base64をエンコード、デコードする方法2020/03/09 10:24:01
- [Java] cmdコマンドを実行するための方法2020/03/06 18:01:10
- [Java] メール(javax.mail)を発送する方法2020/03/05 20:07:49
- [Java] クラス複製(Clonable, Reflection)2020/03/05 00:03:19
- [Java] シリアライズ(直列化: Serializable)2020/03/03 00:03:33
- [Java] StringBuilderとStringBufferの差異2020/03/02 07:52:22
- [Java] Compare関数を使う方法2020/02/29 03:00:00
- [Java] 数字フォーマット(お金表示及び小数点以下表示)2020/02/28 03:00:00
- [Java] サーブレット環境で現在の実行ディレクトリを取得する方法2020/02/27 03:00:00
- [Java] 日本語をユニコードに変換して、ユニコードから日本語に変換する方法2020/02/26 03:00:00
- [Java] コンソールからデータを受け取る方法(System.in)2020/02/25 03:00:00
- [Java] Servlet環境でWebSocket通信中、HttpSessionを取得する方法2020/02/24 07:47:20
- [Java] WebSocketでWeb Sessionを使う方法(Broadcast)とウェブチャットの例2020/02/22 03:00:00
- [Java] WebSocket (ウェブソケット)2020/02/21 03:00:00
最新投稿
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07