UnicodeエスケープされたJavaプロパティファイルをsedとnkfで読めるようにする

native2ascii無き現代に.propertiesの化石と向き合う

もう2022年なのでnative2asciiはJDKに同梱されなくなっているわけですが、一方で目の前にはUnicodeエスケープされた.propertiesファイルが。

手元にはnative2asciiなんぞ無いので、sednkfでなんとかしましょう。

環境

  • macOS Big Sur 11.6
    • brew install nkfnkfを入れてある

こうする

$ cat example.properties | sed -E 's/\\u([0-9A-z]{4})/\&#x\1;/g' | nkf --numchar-input

例えばこんな感じの example.properties なら…

$ cat example.properties
# example.properties
FOO=\u3075\u30FC
BAR=\u3070\u30FC

こうなる

$ cat example.properties | sed -E 's/\\u([0-9A-z]{4})/\&#x\1;/g' | nkf --numchar-input
# example.properties
FOO=ふー
BAR=ばー

ポイント

Unicodeエスケープされた文字列のデコードには、nkf--numchar-input オプションが使える。 しかしこのコマンドで受け付けるのは &#XXXX; のような形式。 Javaのプロパティファイルは \uXXXX の形式でエンコードされているので、sed\uXXXX&#xXXXX; に置換してから nkf に渡す。