我有以下文件:
$ 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 编码。要获取 UTF-8O
输出而不考虑用户的区域设置,请将 更改-C
为-CO
。
要将其转换为é
用户区域设置的正确编码中的字符(假设用户区域设置字符集中有这样的字符):
perl -Mopen=locale -pe 's/\\U([[:xdigit:]]{8})/chr hex$1/ge' <yourfile
例如,在语言环境中,会将其转换为 0xe9 字节( ISO8859-1 中fr_CH.iso88591
的编码),而在语言环境中,会将其转换为 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 é é