我有以下文件:
\n$ cat test\nVilles visit\\U000000e9es\n
Run Code Online (Sandbox Code Playgroud)\n我如何解释这些\\UXXXXXXXX
代码,例如我如何得到:
$ cat test | pipe into something\nVilles visit\xc3\xa9es\n
Run Code Online (Sandbox Code Playgroud)\n
和perl
:
$ perl -C -pe \'s/\\\\U([[:xdigit:]]{8})/chr hex$1/ge\' <yourfile\nVilles visit\xc3\xa9es\n
Run Code Online (Sandbox Code Playgroud)\n假设语言环境使用 UTF-8 作为其字符映射\xc2\xb9,则会转换\\UXXXXXXXX
为 U+XXXXXXXXX 字符的 UTF-8 编码。要获取 UTF-8O
输出而不考虑用户的区域设置,请将 更改-C
为-CO
。
要将其转换为\xc3\xa9
用户区域设置的正确编码中的字符(假设用户区域设置字符集中有这样的字符):
perl -Mopen=locale -pe \'s/\\\\U([[:xdigit:]]{8})/chr hex$1/ge\' <yourfile\n
Run Code Online (Sandbox Code Playgroud)\n例如,在语言环境中,会将其转换为 0xe9 字节( ISO8859-1 中fr_CH.iso88591
的编码),而在语言环境中,会将其转换为 0x88 0x6d(其在 BIG5-HKSCS 中的编码)。以及语言环境中的 0xc3 0xa9(其 UTF-8 编码)。在语言环境中,由于 ISO8859-6 没有字符,因此您会得到.\xc3\xa9
zh_HK.big5hkscs
fr_FR.UTF-8
ar_AE.iso88596
\xc3\xa9
Villes visit\\x{00e9}es
或者您可以使用 ICU uconv
(在icu-devtools
基于 Debian 的系统上的软件包中)来应用Hex/C-Any
转换:
uconv -x hex/c-any <your-file\n
Run Code Online (Sandbox Code Playgroud)\n它可以理解\\uXXXX
并以 UTF-8\\UXXXXXXXX
进行排序(如果使用 则更多)并输出。hex-any
通过管道传递到iconv -f utf-8
以获取用户区域设置中的输出(另请参阅跳过无法编码的字符的选项)iconv
。-c
$ printf \'%s\\n\' \'é é \\x{e9} U+00E9 \\u00e9 \\U000000e9 \\U0001F427 \\ud83d\\udc27\' | uconv -x hex/c-any\né é \\x{e9} U+00E9 \xc3\xa9 \xc3\xa9 \n$ printf \'%s\\n\' \'é é \\x{e9} U+00E9 \\u00e9 \\U000000e9 \\U0001F427 \\ud83d\\udc27\' | uconv -x hex-any \n\xc3\xa9 \xc3\xa9 \xc3\xa9 \xc3\xa9 \xc3\xa9 \xc3\xa9 \n
Run Code Online (Sandbox Code Playgroud)\n(两者都可以识别 java 风格的代理对,但如果它来自 ,则不应出现在输出中cpp -P
)。
为了像\那样perl
理解两者\\uXXXX
,请将 perl 代码更改为:\\UXXXXXXXX
uconv
hex/c-any
$ perl -C -pe \'s/\\\\U([[:xdigit:]]{8})/chr hex$1/ge\' <yourfile\nVilles visit\xc3\xa9es\n
Run Code Online (Sandbox Code Playgroud)\nzsh
\ 的print
内置函数也理解这些\\uXXXX
and \\UXXXXXXXX
(不需要所有 4/8 数字)以及更多,所以你也可以这样做:
print -- "$(<your-file)"\n
Run Code Online (Sandbox Code Playgroud)\n如果区域设置的字符映射中不存在字符,您将收到错误消息。
\n一些printf
实现还支持它们的%b
格式指令:
printf \'%b\\n\' "$(cat <your-file)"\n
Run Code Online (Sandbox Code Playgroud)\n与 zsh 一样print
,它不仅仅支持\\u
/ \\U
,至少支持\\n
/ \\b
/ \\r
... ,\\0ooo
而且通常更喜欢\\xHH
。
\xc2\xb9 查看locale charmap
命令的输出;在使用其他字符映射的语言环境中,您得到的内容在您的情况下几乎没有用处。如果一行上的所有代码点都在 0x0 .. 0xff 范围内,则获得 ISO8859-1 编码(代码点的字节值),如果不是(如果至少有一个代码点高于 0xff)行中),UTF-8 编码(以及一些关于它的警告)
归档时间: |
|
查看次数: |
1092 次 |
最近记录: |