解释文本文件中的 \UXXXXXXXXXX Unicode 代码

解释文本文件中的 \UXXXXXXXXXX Unicode 代码

我有以下文件:

$ 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.big5hkscsfr_FR.UTF-8ar_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' '&#233; &#xe9; \x{e9} U+00E9 \u00e9 \U000000e9 \U0001F427 \ud83d\udc27' | uconv -x hex/c-any
&#233; &#xe9; \x{e9} U+00E9 é é 

相关内容