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 になる。

参考

正直、pack/unpack 関数には苦手意識があり、上記のスクリプトももっとスマートに書けるだろうし、Text Escaping and Unescaping in JavaScript のように自分でページを用意した方が楽だと思う。