웹 페이지의 일부 정보를 처리하는 스크립트가 있습니다. 페이지 인코딩으로 인해 일부 특수 문자가 16진수로 인코딩된 것 같습니다. 예를 들어, "/"로 번역되어야 하는 문자열 "%2f"가 있습니다.
bash에서 이러한 16진수 특수 문자를 ASCII로 어떻게 변환합니까? 어떤 아이디어가 있나요?
답변1
printf
Bash에는 C에서 배운 것과 거의 동일한 내장 기능이 있습니다 . 구문이 약간 다릅니다.
printf '\x2f'
더 높은 수준의 데이터 일관성 문제에 대해 걱정할 필요가 없다면 다음 함수를 통해 간단히 URL을 변환할 수 있습니다.
function deUrl() {
printf "${1//%/\\x}"
}
%
(모든 것을 a로 변환 \x
한 다음 printf로 인쇄합니다.)
답변2
이러한 엔터티는 다음 Python one-liner를 사용하여 디코딩할 수 있습니다.
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2f"
/
코드는 단일 문자로 제한되지 않습니다. 더 복잡한 문자열을 허용합니다.
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2d and %2f"
- and /
Python의 urllib.unquote
문서화됨여기.