Форум сайта python.su
Итак, есть сервер базы данных, в котором все данные хранятся в ср866. Он может выдавать сообщения, естественно, в этой кодировке. К примеру такое:
(-836, ‘isc_dsql_execute: exception 9. \x8f\xae\xaf\xeb\xe2\xaa\xa0 \xe3\xa4\xa0\xab\xa8\xe2\xec \xe1\xaf\xa8\xe1\xa0\xad\xad\xeb\xa9 \xaf\xe0\xa8\xe5\xae\xa4. ’)
Тоесть, как я понимаю - это ср866, но представленный в юникоде. У кого есть какие мысли, как вернуть его в ср866 или вообще заставить его читаться нормально в том же юникоде?
Офлайн
Это не unicode. Это текст в cp866.
>>> a = 'текст в utf-8'
>>> a
'\xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb2 utf-8'
>>> print a
текст в utf-8
>>> b = u'текст в unicode'
>>> b
u'\u0442\u0435\u043a\u0441\u0442 \u0432 unicode'
>>> print b
текст в unicode
Офлайн
j2aЯ это понимаю. Не понимаю, как его в читабельный вид можно привести.
Это не unicode. Это текст в cp866.
a = "(-836, 'isc_dsql_execute: exception 9. \x8f\xae\xaf\xeb\xe2\xaa\xa0 \xe3\xa4\xa0\xab\xa8\xe2\xec \xe1\xaf\xa8\xe1\xa0\xad\xad\xeb\xa9 \xaf\xe0\xa8\xe5\xae\xa4. ')"
a = unicode(a, 'cp866')
print a
(-836, 'isc_dsql_execute: exception 9. Попытка удалить списанный приход. ')
except:
exc_type, exc_value = sys.exc_info()[:2]
exc_type = '%s' % exc_type
exc_value = '%s' % exc_value
exc_value = unicode(exc_value, 'cp866')
(-836, 'isc_dsql_execute: exception 9. \x8f\xae\xaf\xeb\xe2\xaa\xa0 \xe3\xa4\xa0\xab\xa8\xe2\xec \xe1\xaf\xa8\xe1\xa0\xad\xad\xeb\xa9 \xaf\xe0\xa8\xe5\xae\xa4. ')
Отредактировано (Янв. 26, 2007 11:47:50)
Офлайн
Эээээ. Перечитай еще раз мой код. Обрати внимание, что получается если сделать print и что получается, если просто “показать” переменную. Сравни со своей ситуацией.
Офлайн
j2aЗаметил. Я просто забыл дописать print во 2-м коде.
Эээээ. Перечитай еще раз мой код. Обрати внимание, что получается если сделать print и что получается, если просто “показать” переменную. Сравни со своей ситуацией.
try:
con.cursor().execute('delete from PDB_DETAILIN where id=19')
except:
exc_type, exc_value = sys.exc_info()[:2]
exc_type = '%s' % exc_type
exc_value = '%s' % exc_value
exc_value = unicode(exc_value, 'cp866')
print exc_value
Выдает
(-836, 'isc_dsql_execute: exception 9. \x8f\xae\xaf\xeb\xe2\xaa\xa0 \xe3\xa4\xa0\xab\xa8\xe2\xec \xe1\xaf\xa8\xe1\xa0\xad\xad\xeb\xa9 \xaf\xe0\xa8\xe5\xae\xa4. ')
Офлайн
Нанел причину. Это я проглючил. Ошибка была в
baluНадо было так:exc_value = '%s' % exc_value
exc_value = '%s' % exc_value[1]
Офлайн
Всем привет, у меня возникла следующая проблема: когда я перехватываю вывод команды dsquery в Windows XP, получаю каракули вместо русских симфолов. Пробовал следующий метод:
i = i.decode ('cp866')
i = i.encode ('cp1251')
Офлайн
выложи пожалуйста эти “каракули”
Офлайн
попробуй убрать try except
>>> i=unicode('Текст','cp866').encode('cp866')
>>> i=i.decode('cp866')
>>> i.encode('cp1251')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "encodings/cp1251.py", line 18, in encode
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2568' in position 0: character maps to <undefined>
wellобъясни что и как ты делаешь, а то мне напиример не понятно dsquery консольная утилита или приложение под вин32
меня возникла следующая проблема: когда я перехватываю вывод команды dsquery в Windows XP,
Офлайн
попробуй просто так
i = i.decode('cp1251')
Офлайн