질문:
'utf-8' 코덱을 사용하여 문자열 디코딩 'UnicodeDecodeError: 잘못된 연속 바이트' 예외가 발생하지만 다음과 같이 성공합니다. 'latin-1' 코덱. 왜 이런 일이 발생합니까?
코드:
o = "a test of \xe9 char" v = o.decode("utf-8")
해결책:
UTF-8 대. Latin-1 인코딩
UTF-8 인코딩은 여러 바이트를 사용하여 문자를 나타내는 반면, Latin-1은 단일 바이트 인코딩입니다. Latin-1에서 바이트 0xe9는 문자 é를 나타냅니다.
잘못된 연속 바이트
UTF-8에서 바이트 0xe9는 다음을 나타내는 데 사용되는 연속 바이트입니다. 이전 바이트는 멀티바이트 문자의 일부입니다. 그러나 우리 문자열에서 바이트 0xe9는 UTF-8에서 허용되지 않는 격리된 바이트로 나타납니다.
Latin-1 사용
Latin-1이기 때문에 0xe9를 연속 바이트가 아닌 문자로 해석하면 'latin-1' 코덱을 사용하여 디코딩이 성공합니다. 그러나 이 접근 방식은 예상되는 인코딩이 실제로 UTF-8인 경우 오류가 발생할 수 있으므로 이상적이지 않습니다.
추가 컨텍스트
이 오류는 읽을 때 발생할 수 있습니다. 인코딩을 명시적으로 지정하지 않은 소스의 데이터 또는 Latin-1 인코딩을 사용하는 레거시 시스템으로 작업할 때 data.
해결 방법:
문제를 해결하려면 데이터 디코딩 및 인코딩에 올바른 인코딩이 사용되고 있는지 확인하세요. UTF-8 인코딩이 알려져 있거나 예상되는 파일의 경우 파일을 열고 텍스트를 디코딩할 때 UTF-8을 사용하세요. 신뢰할 수 없는 소스나 인코딩을 알 수 없는 시스템에서 받은 데이터의 경우 'utf-8-sig' 또는 'chardet'과 같은 범용 코덱을 사용하여 올바른 인코딩을 자동으로 감지하는 것이 좋습니다.
위 내용은 \'utf-8\'로 문자열을 디코딩하면 \'latin-1\'이 성공하는데 왜 \'UnicodeDecodeError: 잘못된 연속 바이트\'가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!