다음 파일이 있습니다.
$ 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 é é