유니코드 문자열을 인쇄 가능한 문자로 안전하게 변환

유니코드 문자열을 인쇄 가능한 문자로 안전하게 변환

혼합된 유니코드 문자열 \303\243(예 %s: .

나는 GNU coreutils의 printf가 자동으로 변환한다는 것을 알았지만, 인쇄하려는 내용을 모른다면 printf를 신뢰할 수 없다는 것을 얼마 전에 어렵게 배웠습니다.

$ env printf "$(cat filename.htm)"
printf: %20M: invalid conversion specification

나는 또한 bash가 그러한 변환을 할 수 있다는 것을 알고 있지만 정규 표현식을 사용하여 파일을 반복해야 하는데 이는 전혀 안전하지 않습니다.

$ echo $'\303\243'
ã

이러한 파일을 깨끗하고 안전한 방식으로 처리할 수 있는 명령줄 도구가 있습니까?

답변1

파일에 다른 백슬래시가 없는 경우:

$ printf %b\\n 'aa\303\243'
aaã

이렇게 하면 뒤에 정수가 아닌 이중 백슬래시를 사용할 수 있습니다.

$ printf %b\\n "$(sed -E 's/\\/\\\\/g;s/\\(\\[0-7])/\1/g' <<< '\\a\na\303\243')"
\\a\naã

관련 정보