
\303\243
와 같은 혼합된 유니코드 문자열과 인쇄 가능한 문자를 포함하는 많은 HTML 파일이 있습니다 %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ã