클라이언트용 애플리케이션을 디버깅하고 있는데 데이터베이스에서 문제를 해결한 정보를 찾았습니다. 클라이언트에게 추출을 요청했는데 안타깝게도 클라이언트가 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
하지만 두 가지 모두에 특별하므로 xargs
두 sed
배로 늘려야 합니다. ( \\\\x
-> \\x
-> \x
)