Вам понравится Perl 6 , потому что он имеет:
(1 <= $someNumber <= 100) || (1000 <= $someNumber <= 2000))
$isPrimaryColor = $someColor ~~ "Red" | "Blue" | "Yellow"
И вы можете комбинировать оба диапазона:
$someNumber ~~ (1..100) | (1000..2000)
>>> 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
.
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
Также убедитесь, что кодировка терминала установлена на Unicode / UTF-8 (а не на ascii, что, кажется, ваша установка):
Объект Unicode должен быть закодирован, прежде чем его можно будет отобразить на некоторых консолях. Попробуйте вместо этого
u'абвгд'.encode()
закодировать Unicode в строковый объект (скорее всего, используя utf8 в качестве кодировки по умолчанию, но это зависит от вашей конфигурации python)
'абвгд' не является строкой юникода
u'абвгд 'является строкой юникода
Вы не можете печатать строки юникода без их кодирования. Когда вы имеете дело со строками в своем приложении, вы хотите убедиться, что любой ввод декодирован, а любой вывод закодирован. Таким образом, ваше приложение будет иметь дело только со строками Unicode внутри и со строками вывода в UTF8.
Для справки:
>>> 'абвгд'.decode('utf8') == u'абвгд'
>>> True