次のファイルがあります。
$ cat test
Villes visit\U000000e9es
このコードをどのように解釈しますか\UXXXXXXXX
?たとえば、次の方法は何ですか?
$ cat test | pipe into something
Villes visitées
答え1
そしてperl
:
$ perl -C -pe 's/\\U([[:xdigit:]]{8})/chr hex$1/ge' <yourfile
Villes visitées
ロケールが文字マップとしてUTF-8を使用すると仮定すると、\UXXXXXXXX
U + XXXXXXXX文字のUTF-8エンコーディングに変換されます。O
ユーザーのロケールに関係なくUTF-8出力を取得するには、-C
に変更します-CO
。
é
ユーザーロケールの正しいエンコーディングの文字に変換するには(ユーザーロケール文字セットにその文字があると仮定):
perl -Mopen=locale -pe 's/\\U([[:xdigit:]]{8})/chr hex$1/ge' <yourfile
たとえば、ロケールでは0xe9バイト(fr_CH.iso88591
ISO8859-1のエンコード)に変換され、ロケールでは0x88 0x6d(BIG5-HKSCSのエンコード)に変換されます。ロケールの 0xc3 0xa9 (UTF-8 エンコード)。ロケールではISO8859-6に文字がないので。é
zh_HK.big5hkscs
fr_FR.UTF-8
ar_AE.iso88596
é
Villes visit\x{00e9}es
あるいは、ICU uconv
(icu-devtools
Debianベースのシステムのパッケージにある)を使用して申請することもできます。Hex/C-Any
切り替える:
uconv -x hex/c-any <your-file
理解して\uXXXX
並べ\UXXXXXXXX
替えます(もっと使う場合hex-any
)UTF-8に出力されます。iconv -f utf-8
ユーザーのロケールに出力をパイプします(エンコードできない文字をスキップするオプションも参照)iconv
。-c
$ printf '%s\n' 'é é \x{e9} U+00E9 \u00e9 \U000000e9 \U0001F427 \ud83d\udc27' | uconv -x hex/c-any
é é \x{e9} U+00E9 é é