ISO-8859-1에서 Windows-1251로 포맷됨

ISO-8859-1에서 Windows-1251로 포맷됨

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로 처리하고 이 변환이 브라우저와 웹 서버 간의 통신의 일부일 뿐이라고 가정하고 다른 오해를 식별할 수 있습니다.

관련 정보