Slim3 の application_ja.properties に日本語を書くために UTF-16 LE を16進数で表現する
Slim3 の application_ja.properties にマルチバイトを記述するには、文字列を UTF-16LE に変換して16進数でダンプする必要があることに気が付いた。
この方法を Java でやる方法がわからなかったので、Perl で書いてみた。
#!/usr/bin/perl use strict; use warnings; use Encode; use utf8; my $unicodes; my $string = "タイムスタンプ"; my @chars = split '', $string; foreach my $char (@chars) { $unicodes .= '\\u' . unpack('H*', encode('utf-16-le', decode_utf8($char))); } # BOM は付加していない # 付加する場合は、\ufffe を文字列の先頭に追加する # \ubf30\ua430\ue030\ub930\ubf30\uf330\ud730 が出力される print $unicodes;
UTF-16 にはリトルエンディアンの UTF-16 LE とビッグエンディアンの UTF-16 BE がある。application_ja.properties の場合は、UTF-16 LE を使うので、BOM には(16進数の) fffe を使う。
UTF-16 LE か UTF-16 BE の区別をするには、文字列の先頭に追加される BOM が fffe の場合は UTF-16 LEであり、feff の場合はUTF-16 BE になる。
参考
- Unicode の文字列をエスケープする JavaScript
- Text Escaping and Unescaping in JavaScript
- Unicode の文字列をソースコードに埋め込む方法
- 2進数、8進数、16進数での数値表現
- PerlでUTF-16LE + BOM
正直、pack/unpack 関数には苦手意識があり、上記のスクリプトももっとスマートに書けるだろうし、Text Escaping and Unescaping in JavaScript のように自分でページを用意した方が楽だと思う。