UTF-8
문자열 "Ïåðåïðîøèòü Ñûðîåæêèíà"의 인코딩을 수정하고 올바른 문자열 "Перепрошить Сыроежкина"를 얻고 싶습니다 .이것ISO-8859-1
웹사이트에서는 올바른 결과를 얻으 려면 에서 로 변환해야 한다고 알려 주지만 이 방법을 Windows-1251
사용하려고 하면 iconv
다음 오류가 발생합니다.
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | iconv -f iso-8859-1 -t windows-1251 -
iconv: illegal input sequence at position 0
Windows-1251
내가 또한 이해하지 못하는 것은 왜 문자열을 UTF-8
.
편집: 나도 사용해 보았지만 enconv
결과도 만족스럽지 않았습니다.
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enca -L ru -
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from ISO-8859-5
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enconv -L ru -x UTF-8 -
Ïåðåïðîøèòü Ñûðîåæêèíà
$ echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | enconv -L ru -x windows-1251 -
답변1
문자열은 이중으로 인코딩된 것으로 보입니다. 먼저 원본 Windows-1251이 ISO-8859-1로 잘못 해석된 다음 잘못 해석된 문자 자체가 해당 UTF-8 문자로 변환됩니다.
"올바른" 텍스트와 함께 "잘못된" 텍스트가 보이는 문자로 나타날 수 있다는 사실은 시스템이 UTF-8 또는 다른 유니코드 문자 세트로 실행되고 있으며 문자열이 잘못 해석되어 유니코드 형식으로 변환되었음을 나타냅니다.
다음과 같이 디코딩해 보세요.
echo 'Ïåðåïðîøèòü Ñûðîåæêèíà' | iconv -f utf-8 -t iso-8859-1 | iconv -f windows-1251 -t utf-8
Перепрошить Сыроежкина
이러한 문자가 실제로 기본 8비트 인코딩에 있는 경우 문자열은 UTF-8 시스템에서 "���������� ����������”와 같이 나타납니다. 높은 비트 세트가 있는 ISO-8859-1(또는 8비트 문자 세트) 문자는 UTF-8로 해석될 때 "잘못된 인코딩" 결과를 생성할 수 있습니다. 유니코드에는 "이 문자가 잘못된 방식으로 인코딩되었습니다"를 의미하는 특수 표시 기호 "�"가 있습니다.
시스템이 실제로 ISO-8859-1을 사용하는 경우 문자열은 "Ïåðåïðîøèòü Ñûðîåæêèèíà"로 표시되지만 ISO-8859-1로 인해 동일한 터미널 창에 "Перепрошить Сыроежкина"를 표시하는 것은 불가능합니다. 키릴 문자는 전혀 없습니다.
연결하려는 웹 사이트는 수신 문자열을 UTF-8로 처리하고 이 변환이 브라우저와 웹 서버 간의 통신의 일부일 뿐이라고 가정하고 다른 오해를 식별할 수 있습니다.