LINUX.ORG.RU

Декодировать строку, возвращаемую python-mssql

 , ,


0

2

Делаю выборку из базы данных. Админы поменяли что-то в настройках MSSQL, и мои python-скрипты вылетают с ошибкой. Сейчас у меня задача сводится к правильному декодированию следующей строки:

<type 'unicode'>
u'\xc2\xe5\xf2\xe5\xf0\xe0\xed \xe1\xee\xe5\xe2\xfb\xf5 \xe4\xe5\xe9\xf1\xf2\xe2\xe8\xe9 ...'
В строке записано «Ветеран боевых действий ...» (python-mssql эту последовательность байт почему-то возвращает как unicode, а не как str).
Попытка print <строка>.encode(«cp1251») приводит к ошибке UnicodeEncodeError.

Как корректно обработать такие строки?

★★★★★

Последнее исправление: pacify (всего исправлений: 2)

Ответ на: комментарий от Solace

Попробовал. Не заработало.
Код.

v = u'\xc2\xe5\xf2\xe5\xf0\xe0\xed \xe1\xee\xe5\xe2\xfb\xf5 \xe4\xe5\xe9\xf1\xf2\xe2\xe8\xe9 ...'
print v.encode('UTF-8')
print v.encode('UTF-8').decode('UTF-8').encode('cp1251')
Результат
├В├е├▓├е├░├а├н ├б├о├е├в├╗├╡ ├д├е├й├▒├▓├в├и├й ...
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    print v.encode('UTF-8').decode('UTF-8').encode('cp1251')
  File "C:\Python27\lib\encodings\cp1251.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-6: character maps to <undefined>

pacify ★★★★★
() автор топика
>>> s = u'\xc2\xe5\xf2\xe5\xf0\xe0\xed \xe1\xee\xe5\xe2\xfb\xf5 \xe4\xe5\xe9\xf1\xf2\xe2\xe8\xe9 ...'
>>> print s.encode('cp1252').decode('cp1251')
Ветеран боевых действий ...
grazor ★★
()
Ответ на: комментарий от grazor

Спасибо, заработало.

  s = v1.encode("cp1252").decode("cp1251").encode("cp1251")
  f_.write("%s\n" % s)

pacify ★★★★★
() автор топика

На будущее: пиши юнит-тесты и заставляй админов эти тесты проходить.

Goury ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.