Найти - Пользователи
Полная версия: ПЕрекодировка.
Начало » Базы данных » ПЕрекодировка.
1 2 3
balu
Итак, есть сервер базы данных, в котором все данные хранятся в ср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 или вообще заставить его читаться нормально в том же юникоде?
j2a
Это не 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
balu
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. ')
Вот и спрашиваю, какие есть идеи.
j2a
Эээээ. Перечитай еще раз мой код. Обрати внимание, что получается если сделать print и что получается, если просто “показать” переменную. Сравни со своей ситуацией.
balu
j2a
Эээээ. Перечитай еще раз мой код. Обрати внимание, что получается если сделать print и что получается, если просто “показать” переменную. Сравни со своей ситуацией.
Заметил. Я просто забыл дописать print во 2-м коде.
Вот код
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. ')
Я думаю тут дело в этой строчке
exc_value = ‘%s’ % exc_value

Когда я вывод копипастил (см. код 1) - все нормально, а вот когда преобразую вывод в юникод, тогда все идет лесом.
balu
Нанел причину. Это я проглючил. Ошибка была в
balu
    exc_value = '%s' % exc_value
Надо было так:
    exc_value = '%s' % exc_value[1]
well
Всем привет, у меня возникла следующая проблема: когда я перехватываю вывод команды dsquery в Windows XP, получаю каракули вместо русских симфолов. Пробовал следующий метод:
i = i.decode ('cp866')
i = i.encode ('cp1251')
получаю вообще пустые строки. Не подскажете, как решить проблему?
pythonwin
выложи пожалуйста эти “каракули”
pythonwin
попробуй убрать 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 в Windows XP,
объясни что и как ты делаешь, а то мне напиример не понятно dsquery консольная утилита или приложение под вин32
pythonwin
попробуй просто так
i = i.decode('cp1251')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB