2012-03-27 3 views
1

많은 링크와 제안을 읽었으며, 결국 ASCII 문자가 아닌 파이썬에서 문자열을 조작해야 할 때가 훨씬 전에 혼란 스럽습니다. utf-8 문자열을 열거하는 가장 쉬운 방법

우분투에 파이썬 2.7을 사용

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

for i, j in enumerate('Сон'): print '%d: %s' % (i+1, j) 

출력 :

1: Ð 
2: ¡ 
3: Ð 
4: ¾ 
5: Ð 
6: ½ 

가장 쉬운 방법 나는 3 UTF-8 인코딩 된 문자 열거 얻을 무엇 대신 6 바이트 문자?

+0

가 귀하의 질문에 대답에이 링크를합니까 사용할 인코딩을 알고 확인해야합니다 - http://stackoverflow.com/questions/8873517/printing-utf-8-encoded-byte-string – Gangadhar

+0

또는 변수가 리터럴이 아닌 경우 'utf8_string.decode ('utf-8 ')'. – agf

답변

1

추가 'U'는 그것의 앞에이 유니 코드 지정 : 파이썬 소스 코드 인코딩에 대해

for i, j in enumerate(u'Сон'): print '%d: %s' % (i+1, j) 

출력

1: С 
2: о 
3: н 
+0

@theta,'sys.stdout.encoding '은 뭐라고 말합니까? –

+0

두 가지 비슷한 대답을하고 더 많은 것을 확인했기 때문에 나는 이미 이것을 시도했다. 문제는 내 편집자 인 SciTE와 출력 창이다. 터미널에서 당신의 제안은 잘 작동하고 SciTE (내가 가장 효과가 있었음)에서 UnicodeDecodeError를 얻습니다. 더 조사 할 것입니다 – theta

3

간단한 대답 : don't.

>>> len(u'Сон') 
3 
+1

이전에 읽었습니다. 일찍 해독하고 나중에 인코딩하십시오. 그것을 얻지 못했고, 파이썬 3이 더 빨리 예기되기를 바랍니다. – theta

+1

@theta Eh? Python 3.0이 2008 년 12 월에 릴리스되었습니다. –

+0

그리고 Python 패키지를 선호합니다. 또는 시스템이 기본 인터프리터로 설정합니다 : D – theta

1
# -*- coding: utf-8 -*- 
for i, j in enumerate(u'Сон'): 
    print '%d: %s' % (i+1, j) 

: http://www.python.org/dev/peps/pep-0263/

'u'사전 before string은 유니 코드 문자열이 사용된다는 것을 의미합니다.

3

당신이 출력에 UTF-8 문자를 원하는 경우, 당신은 또한 확실히 파이썬

$ export PYTHONIOENCODING=ascii 
$ python 
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'ascii' 
>>> for i, j in enumerate(u'Сон'): print '%d: %s' % (i+1, j) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0421' in position 3: ordinal not in range(128) 

$ export PYTHONIOENCODING=utf-8 
$ python 
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.stdout.encoding 
'utf-8' 
>>> for i, j in enumerate(u'Сон'): print '%d: %s' % (i+1, j) 
... 
1: С 
2: о 
3: н 
>>> 
+0

감사합니다, 언급 한 문제는 제 편집자였습니다. SciTE에 익숙하다면 'output.code.page = 65001'로 설정했지만 출력 창은 아마도 ASCII입니다. – theta

관련 문제