백분율로 인코딩된 모든 UTF-8 하위 문자열을 일반 UTF-8 텍스트로 바꾸는 방법은 무엇입니까?

백분율로 인코딩된 모든 UTF-8 하위 문자열을 일반 UTF-8 텍스트로 바꾸는 방법은 무엇입니까?

URL에 % 인코딩된 UTF-8 텍스트가 많이 포함된 HTML 파일이 있습니다.

예를 들어, "%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"는 "ресурсы"(러시아어로 "자원")를 의미합니다.

작업은 이러한 모든 하위 문자열을 읽을 수 있는 UTF-8 텍스트로 바꾸는 것입니다.

%작업을 단순화하기 위해 파일에 다른 기호 사용이 없다는 점을 고려할 수 있습니다. 영숫자 문자는 대문자 또는 소문자일 수 있습니다.

sed나는 이것이 , 또는 무엇인가를 사용하여 우아하게 수행될 수 있다고 생각 perl하지만 , awk방법은 확실하지 않습니다.

이 웹 애플리케이션거기에 붙여넣은 텍스트를 사용하면 효과가 있을 것 같습니다.

답변1

일부 시스템에서 bash, zsh, GNU echo 또는 ksh를 구현하려면 echo -e모든 %것을 \x.

url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"
temp_string=${url_encoded_string//%/\\x}

printf '%s\n' "$temp_string"
# output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B

echo -e "$temp_string"
# output: ресурсы

(문자열 자체에는 백슬래시 문자가 포함되어 있지 않으며 명령 echo에서 지원하는 옵션 중 하나 가 아니라고 가정합니다.)

@JoshLee도 지적했듯이 "에코 경고"를 직접 사용하면 피할 수 있습니다.

printf ${url_encoded_string//%/\\x}

첫 번째 명령 직후가 아니라.

답변2

펄 사용:

perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'

또는 다음을 사용하여 URI::Escape:

perl -MURI::Escape -pe '$_=uri_unescape$_'

답변3

도움을 줄 수 있는 프로그램이 있습니다 convmv.

.it을 사용하면 convmv --unescape /some_path/target_file테스트 실행이 수행됩니다.

확인하신 후 계속을 이용해주세요 convmv --notest --unescape /some_path/target_file.

프로그램의 홈 페이지는 다음과 같습니다.http://j3e.de/linux/convmv/

관련 정보