![유니코드 문자열을 인쇄 가능한 문자로 안전하게 변환](https://linux55.com/image/31024/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%9D%B8%EC%87%84%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%EB%AC%B8%EC%9E%90%EB%A1%9C%20%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C%20%EB%B3%80%ED%99%98.png)
혼합된 유니코드 문자열 \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ã