Python unicode в терминале Mac OS X

Вам понравится Perl 6 , потому что он имеет:

И вы можете комбинировать оба диапазона:

$someNumber ~~ (1..100) | (1000..2000)

8
задан Jon W 28 July 2009 в 15:24
поделиться

5 ответов

>>> print 'абвгд'
абвгд

Когда вы вводите некоторые символы, ваш терминал решает, как эти символы будут представлены в приложении. Ваш терминал может передавать символы приложению в кодировке utf-8, ISO-8859-5 или даже что-то, что понимает только ваш терминал. Python получает эти символы как некоторую последовательность байтов. Затем python распечатывает эти байты как есть, и ваш терминал каким-то образом интерпретирует их для отображения символов. Поскольку ваш терминал обычно интерпретирует байты так же, как он кодировал их раньше, все отображается так, как вы это ввели.

>>> u'абвгд'

Здесь вы вводите некоторые символы, которые поступают в интерпретатор python в виде последовательности байтов, возможно, закодированных в некоторых путь от терминала. С префиксом u python пытается преобразовать эти данные в Unicode. Чтобы сделать это правильно, python должен знать, какую кодировку использует ваш терминал. В вашем случае похоже, что Python предполагает, что кодировка ваших терминалов будет ASCII, но полученные данные не соответствуют этому, поэтому вы получаете ошибку кодирования.

Таким образом, прямым способом создания строк Unicode в интерактивном сеансе будет примерно так:

>>> us = 'абвгд'.decode('my-terminal-encoding')

В файлах вы также можете указать кодировку файла с помощью специальной строки режима:

# -*- encoding: ISO-8859-5 -*-
us = u'абвгд'

Чтобы узнать о других способах установки входной кодировки по умолчанию, вы можете посмотреть sys.setdefaultencoding (.. .) или sys.stdin.encoding .

17
ответ дан 5 December 2019 в 04:43
поделиться

In addition to ensuring your OS X terminal is set to UTF-8, you may wish to set your python sys default encoding to UTF-8 or better. Create a file in /Library/Python/2.5/site-packages called sitecustomize.py. In this file put:

import sys
sys.setdefaultencoding('utf-8')

The setdefaultencoding method is available only by the site module, and is removed from the sys namespace once startup has completed. As such, you'll need to start a new python interpreter for the change to take effect. You can verify the current default coding at any time after startup with sys.getdefaultencoding().

If the characters aren't already unicode and you need to convert them, use the decode method on a string in order to decode the text from some other charset into unicode... best to specify which charset:

s = 'абвгд'.decode('some_cyrillic_charset') # makes the string unicode
print s.encode('utf-8') # transform the unicode into utf-8, then print it
9
ответ дан 5 December 2019 в 04:43
поделиться

Также убедитесь, что кодировка терминала установлена ​​на Unicode / UTF-8 (а не на ascii, что, кажется, ваша установка):

http://www.rift.dk/news.php?item.7.6

3
ответ дан 5 December 2019 в 04:43
поделиться

Объект Unicode должен быть закодирован, прежде чем его можно будет отобразить на некоторых консолях. Попробуйте вместо этого

u'абвгд'.encode()

закодировать Unicode в строковый объект (скорее всего, используя utf8 в качестве кодировки по умолчанию, но это зависит от вашей конфигурации python)

0
ответ дан 5 December 2019 в 04:43
поделиться

'абвгд' не является строкой юникода

u'абвгд 'является строкой юникода

Вы не можете печатать строки юникода без их кодирования. Когда вы имеете дело со строками в своем приложении, вы хотите убедиться, что любой ввод декодирован, а любой вывод закодирован. Таким образом, ваше приложение будет иметь дело только со строками Unicode внутри и со строками вывода в UTF8.

Для справки:

>>> 'абвгд'.decode('utf8') == u'абвгд'
>>> True
0
ответ дан 5 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: