문제

이것이 작동하지 않는 이유에 대한 생각이 있습니까? 나는 정말로 '무시'가 옳은 일을 할 것이라고 생각했다.

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)
도움이 되었습니까?

해결책

… 그들이 "인코딩"이라고 불리는 이유가 있습니다…

약간의 서문 : 유니 코드를 표준 또는 이상적인 상태로 생각하십시오. 유니 코드는 문자의 테이블 일뿐입니다. №65는 라틴 캐피탈 A입니다. №937은 그리스 수도 오메가입니다. 그냥.

컴퓨터가 유니 코드를 저장하고 조작하기 위해 인코딩 바이트로. 가장 간단합니다 부호화 유니 코드의 UCS-4; 모든 캐릭터는 4 바이트를 차지하며 모든 ~ 10000000 문자를 사용할 수 있습니다. 4 바이트는 유니 코드 테이블의 문자 수를 4 바이트 정수로 포함합니다. 또 다른 매우 유용한 인코딩은 UTF-8으로, 1 ~ 4 바이트의 유니 코드 문자를 인코딩 할 수 있습니다. 그러나 "Latin1"과 같은 제한된 인코딩도 있으며, 여기에는 서구 국가에서 주로 사용되는 매우 제한된 범위의 문자가 포함되어 있습니다. 그런 인코딩 문자 당 하나의 바이트 만 사용하십시오.

기본적으로 유니 코드가 될 수 있습니다 인코딩 많은 인코딩과 인코딩 된 문자열이있을 수 있습니다 디코딩 유니 코드에. 문제는 유니 코드가 꽤 늦게 왔기 때문에 8 비트를 사용하여 자란 우리 모두 캐릭터 세트 우리가 함께 일한이 모든 시간이 너무 늦게 배웠습니다. 인코딩 문자열. 인코딩은 ISO8859-1 또는 Windows CP437 또는 CP850, OR, OR, OR, OR 일 수 있습니다.

따라서 소스 코드에서 문자열 "모니터링"목록 "추가 문자열을 입력하면 (그리고 문자열을 원한다고 생각합니다. 인코딩 시스템의 기본 코드에 따라 (Byte x93에 의해 나는 Windows CodePage 1252,“Western”을 사용한다고 가정합니다). 그것으로부터 유니 코드를 얻고 싶다면 풀다 "CP1252"인코딩의 문자열.

그래서 당신이 의미하는 것은 다음과 같습니다.

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

Python 2.x에 an이 포함 된 것은 불행한 일입니다 .encode 문자열 방법도; 이것은 "zip"또는 "rot13"또는 "base64"와 같은 "특수"인코딩에 대한 편의 기능이며, 유니 코드와 관련이 없습니다.

어쨌든, 당신이 당신의 유니 코드 전환을 위해 기억해야 할 것은 다음과 같습니다.

  • 유니 코드 문자열이 가져옵니다 인코딩 Python 2.x 문자열 (실제로 바이트 시퀀스)에
  • Python 2.x 문자열이 가져옵니다 디코딩 유니 코드 문자열로

두 경우 모두를 지정해야합니다 부호화 그것은 사용될 것입니다.

분명하지 않습니다. 졸려요.하지만 도와주기를 바랍니다.

추신 : 유머러스 한 측면 참고 : 마야인에는 유니 코드가 없었습니다. 고대 로마인, 고대 그리스인, 고대 이집트인도 그렇지 않았습니다. 그들은 모두 자신의 "인코딩"을 가지고 있었고 다른 문화에 대해 거의 존중하지 않았습니다. 이 모든 문명들은 먼지로 무너졌습니다. 사람들에 대해 생각해보십시오! 인류의 이익을 위해 앱을 유니 코드 인식으로 만드십시오. :)

PS2 "그러나 중국인…"라고 말함으로써 이전 메시지를 망치지 마십시오. 그러나 경향이 있거나 그렇게해야 할 의무가 있다고 생각되면 유니 코드 BMP가 대부분 중국 표상으로 채워진다고 생각하여 지연시켜 Ergo Chinese는 유니 코드의 기초입니다. 사람들이 유니 코드 인식 응용 프로그램을 개발하는 한 터무니없는 거짓말을 발명 할 수 있습니다. 건배!

다른 팁

Encode는 유니 코드 문자열에서 사용할 수 있지만, 당신이 가진 문자열은 유니 코드처럼 보이지 않습니다 (u'add x93monitoring x93 to list '로 시도하십시오).

>>> u'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
'add \x93Monitoring\x93 to list '

이것은 작동하는 것 같습니다 :

'add \x93Monitoring\x93 to list '.decode('latin-1').encode('latin-1')

그것에 관한 문제가 있습니까? '무시', '교체'및 기타 인코딩 오류 처리가 발생할 때 궁금합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top