배시 \xC3\x89를 É로 변환하시겠습니까?

배시 \xC3\x89를 É로 변환하시겠습니까?

iwlist wlo1 scan | grep ESSID스크립트 내에서 실행하고 있습니다 .

다음 형식으로 프랑스어 문자를 표시합니다.

\xC3\x89É와 \xC3\xA9é의 경우.

이 형식을 무엇이라고 부르는지 잘 모르겠습니다. 나는 사용하려고유니코드 변환에 대한 답변 echo -ne '\xC3\xA9' | iconv -f utf-16be하지만 .

이 형식의 공식 이름은 무엇입니까? Bash에서 어떻게 변환하나요?

답변1

16진수 숫자 상수는 일반적으로 0x접두사로 표시됩니다.
문자 및 문자열 상수는 \x두 개의 16진수 접두사가 붙은 16진수로 문자 코드를 나타낼 수 있습니다.

echo -ne '\xC3\x89'당신에게 주어져야 합니다 É.

  • -e- 백슬래시 이스케이프 해석 활성화( 16진수 값 (1~2자리) \xHH이 포함된 바이트 포함)HH

다루다더 나은 휴대성사용 printf기능:

printf "%b" '\xC3\x89'
É

답변2

노력하다

 % echo -n éÉ | hd
 00000000  c3 a9 c3 89                                       |....|
 00000004

hdhexdump 유틸리티는 어디에 있습니까?

그래서 당신의 일은 단지UTF-8인코딩(관찰한 출력은 \xC3\x89UTF-8의 16진수 표현입니다). 오늘 우리는UTF-8은 어디에나 있습니다.

내 환경에는 (비록 내가 프랑스인이기는 하지만) LANG=en_US.UTF-8둘 다 있습니다.LC_ALL=en_US.UTF-8

반품,

echo '\xC3\x89\xC3\xA9'

생산하다

Éé

예상대로.

이것도 이렇다

echo  "\\xC3\\x89\\xC3\\xA9" | iconv -t utf-8

또한 읽어보세요로케일(7).

일부문자 인코딩(예: Old PlainsASCII 코드) é또는 É문자가 없고 다른 문자(예:ISO-8859-1) 다르게 인코딩합니다.

답변3

iwlistASCII 비제어 문자에 해당하지 않는 모든 바이트를 표시합니다. 여기서 는 16진수 바이트 수 \xHH입니다 .HH

이 인코딩을 실행 취소하려면 출력을 iwlist다음으로 파이프하면 됩니다.

perl -pe 's/\\x([\da-f]{2})/chr(hex($1))/gie'

0xc3다음 바이트는 0xa9문자의 UTF-8 인코딩을 구성합니다 é.

로케일에서도 UTF-8 인코딩을 사용하는 경우 출력에 perl해당 문자가 표시됩니다 é. 그렇지 않은 경우(아마도 UTF-8이 표준이므로) 항상 의 출력을 파이프하여 UTF-8에서 해당 로케일에 사용되는 문자 인코딩으로 perl변환 할 수 있습니다.iconv -f utf-8f

관련 정보