2014-10-11 3 views
0

내가 좋아하는 목록이 있습니다인코딩 문자가 목록에서 작동하지 않습니까?

print alist  
['G\xc3\xbcnther', 'Santher'] 

을 그리고 그것을 변경하려면 : 다른 사람에

alist=[s.encode("utf-8") for s in alist] 
print alist 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) 

귄터 가져 단어 :

['Günther', 'Santher'] 

내가 좋아하는 물건을 많이 시도 분실되었거나 G \ xc3 \ xbcnther가 동일하게 유지됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

모든 작업을 변경할 수 없습니다 괜찮 으면 여기 API에서 잘못된 것을 가정합니다.

문자열이 아닌 다른 개체를 인쇄하여 먼저 문자열로 변환합니다. 이 경우 목록은 입력시 등호 목록으로 평가되는 Python 표현식을 나타내는 문자열로 변환됩니다. 이것은 목록을 표시하는 가장 유용한 방법입니다. 목록에있는 내용을 정확히 볼 수 있으며 때로는 그냥 이스케이프 처리되는 경우도 있습니다.

비교 : \xc3\xbc :

>>> a = ['test\'test\"test', 0, '0'] 

>>> print a[0] 
test'test"test 

>>> print a 
['test\'test"test', 0, '0'] 

편지 ü 두 바이트로 UTF-8로 인코딩됩니다. 따라서 문자열 'G\xc3\xbcnther'을 UTF-8 터미널에 인쇄하면 Günther이 표시됩니다. 괜찮은 텍스트 편집기에서 파일을 저장하고 해당 파일을 열면 Günther이 표시됩니다 (아마도 인코딩 설정을 약간 찌르면됩니다). 모든 의도와 목적을 위해, 이것은 "Günther"라는 단어를 bytestring에 저장하는 가장 좋은 방법입니다.

좋은 방법으로 목록을 인쇄하려면 사용자가 직접 포맷해야합니다. 이 문자열 목록이 있다면 예를 들어, 귀하의 예제처럼, join 좋은 일 것입니다 :

>>> print '; '.join(['G\xc3\xbcnther', 'Santher']) 
Günther; Santher 

(그런데 :. 당신이 bytestring을 인코딩 할 수없는, 이미 인코딩 된 당신은 할 수있다, 그러나, 디코딩 그것.)

1

은 당신의 코드는 문자열 형태로 사용하는 것을 볼 수있는 재현 형태을 표시이 :

print alist[0] 

파이썬은 동일하게 유니 코드 문자를 절약 할 수있는 방법이 :)

+0

그래서 목록을 변경할 수 있습니까? 정말? –

+0

이것은 아무런 문제가 없으며 스타일은 파이썬에 속합니다. – lxmahyar

+0

이 목록에서 "\ xc3 \ xbc"의 "ü"를 만들 가능성이 있습니까? 어떤 종류의 해결 방법이 있습니까? 그 목록에서 문자열 만들기? –

관련 문제