Самый простой способ перечислить строку utf-8 - PullRequest
1 голос
/ 27 марта 2012

Я прочитал много ссылок и предложений, и в конце концов я еще больше запутался, чем раньше, когда мне нужно манипулировать строками в Python, которые не являются символами ASCII.

Я использую Python 2.7 в Ubuntu:

#!/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 байтов?

Ответы [ 4 ]

3 голосов
/ 27 марта 2012

Если вы хотите вывести символы utf-8, вам также необходимо убедиться, что Python знает, какую кодировку использовать

$ 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: н
>>> 
3 голосов
/ 27 марта 2012

Простой ответ: не .

>>> len(u'Сон')
3
1 голос
/ 27 марта 2012
# -*- coding: utf-8 -*-
for i, j in enumerate(u'Сон'):
    print '%d: %s' % (i+1, j)

О кодировках исходного кода в Python: http://www.python.org/dev/peps/pep-0263/

Префикс 'u' перед строкой означает, что будет использоваться строка в кодировке Unicode.

0 голосов
/ 27 марта 2012

Добавьте 'u' перед ним, чтобы указать, что это Unicode:

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

Вывод

1: С
2: о
3: н
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...