16진수 변수에서 UTF8을 얻는 방법은 무엇입니까?

16진수 변수에서 UTF8을 얻는 방법은 무엇입니까?

클라이언트용 애플리케이션을 디버깅하고 있는데 데이터베이스에서 문제를 해결한 정보를 찾았습니다. 클라이언트에게 추출을 요청했는데 안타깝게도 클라이언트가 16진수로 된 원시 데이터를 보내줬네요...

나는 클라이언트에게 데이터베이스 도구에서 일반 텍스트를 다시 보내달라고 요청하고 있지만 응답을 기다리는 동안 나는 bash 솔루션을 찾고 있습니다.

인코딩된 데이터가 UTF-8로 인코딩된 문자열이라는 것을 알고 있습니다. Unix 도구를 사용하여 이를 디코딩할 수 있는 방법이 있습니까?

답변1

포함 xxd(일반적으로 와 함께 배송됨 vim)

$ echo 5374c3a97068616e650a | xxd -p -r
Stéphane

로케일의 문자 집합( 출력 참조 locale charmap)이 UTF-8이 아닌 경우(그러나 인코딩된 문자열의 모든 문자를 나타낼 수 있음) | iconv -f UTF-8.

모든 문자를 나타내지 않는 경우 | iconv -f UTF-8 -t //TRANSLIT대략적인 값을 구해 볼 수 있습니다.

답변2

Perl도 중요합니까?

$ echo "68656c6c6f0a" | \
  perl -ne 'tr/a-fA-F0-9//cd; print pack("H*", $_)'
hello

그렇지 않다면 다음과 같이 할 수 있습니다.

$ echo "68656c6c6f0a" | sed -Ee 's/[0-9a-fA-F]{2}/\\\\x&/g' | xargs printf 
hello

리터럴 백슬래시가 필요 printf하지만 두 가지 모두에 특별하므로 xargssed배로 늘려야 합니다. ( \\\\x-> \\x-> \x)

관련 정보