Форум сайта python.su
всем привет
есть код
a,c = 32, “”.decode('cp1251')
while a < 256:
print “%s %s”%(a,chr(a))
c = c+“%s”%(chr(a))
a = a+1
print c
исполняется с ошибкой
(начало вырезано)
127
128 Ђ
Traceback (most recent call last):
File “C:\Python25\test.py”, line 6, in <module>
c = c+“%s”%(chr(a))
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0x80 in position 0: ordinal not in range(128)
>>>
подскажите как исправить ошибку.
Большое спасибо
Офлайн
заменить
a,c = 32, “”.decode('cp1251')
на
a,c = 32, “”
Офлайн
но в таком случае получаем вывод
252 ь
253 э
254 ю
255 я
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
а мне нужны символы кириллицы, которые отсутствуют в последней строке (print c).
как их получить?
P.S. начинал я с кода который предлагаете вы, но отсутствие символов кириллицы (print c) сподвигло меня на поиски приключений, которые еще продолжаются :)
Отредактировано (Июль 6, 2007 11:16:19)
Офлайн
нашел решение
a,c = 32, “”
while a < 256:
print “%s %s”%(a,chr(a))
c = c+“%s”%(chr(a))
a = a+1
print c.decode('cp866')
странно но print c.decode('cp1251'), print c.decode('utf-8') в винде приводит к ошибке преобразования кодировки.
Отредактировано (Июль 6, 2007 12:13:51)
Офлайн
qmanэто не решение – это жест отчаяния.
нашел решение
a,c = 32, “”
while a < 256:
print “%s %s”%(a,chr(a))
c = c+“%s”%(chr(a))
a = a+1
print c.decode('cp866')
странно но print c.decode('cp1251'), print c.decode('utf-8') в винде приводит к ошибке преобразования кодировки.для начала неплохо разобраться где и как обстоит дело с кодировками, и в чем разница между decode и encode.
Получается что python работает в винде как консольное приложение? т.к. использует cp866верно. python.exe – консольная прога, pythonw.exe – GUI-запускалка, работает без присоединенной консоли.
Офлайн
bialix
тогда почему в цикле while и после окончания цикла одному и тому номеру соответствуют разные символы?
Такое утверждение я сделал из за того что переменную “c” приходится делать decode('cp866') а символ отображается без соответствующий номеру “a” .
Офлайн
qmanнифига не понял.
bialix
тогда почему в цикле while и после окончания цикла одному и тому номеру соответствуют разные символы?
Такое утверждение я сделал из за того что переменную “c” приходится делать decode('cp866') а символ отображается без соответствующий номеру “a” .
Офлайн
Добрый день!
Столкнулся с такой же проблемой, но при работе со словарем Стемминга. Задача была извлечь корень из русского слова, благо словарь поддерживает, но сам компилятор ругается: UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xef in position 0: ordinal not in range(128)
Сам код:
from nltk.stem import SnowballStemmer russian_stemmer = SnowballStemmer('russian') russian_stemmer.stem('приветственный')
Офлайн
юзай python3 или делай так
#coding: utf-8 from nltk.stem import SnowballStemmer russian_stemmer = SnowballStemmer('russian') russian_stemmer.stem(u'приветственный')
Отредактировано bismigalis (Апрель 24, 2013 16:06:05)
Офлайн
Всё равно появляется ошибка, полный ее текст:
Traceback (most recent call last): File "C:/Python27/123", line 4, in <module> russian_stemmer.stem('приветственный') File "C:\Python27\lib\site-packages\nltk\stem\snowball.py", line 3023, in stem rv, r2 = self.__regions_russian(word) File "C:\Python27\lib\site-packages\nltk\stem\snowball.py", line 3194, in __regions_russian word = (word.replace(u"i^a", u"A") UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
Офлайн