Some HAT... |
= Анабар.ru => Python-форумы => Язык программирования Python => сообщение 887 |
| Вход | Регистрация | |
нет
фото
Автор: Xiled Дата: 24-Jun-2006 17:18 (gmt = -3.0) Python encoding
Драссьте
Исходные данные: Python2.4,Mysql 5.0.18-standard,mod_python,MySQLdb version 1.2.1_p2 Кодировка терминала,MySQL, кодировка всего остального =-= 1251 =-=
Не знаю что уж там точно Pyhton получает из MySQL но в терминал он мне притует хекс коды символов старше 127 (при этом все совершенно верно то есть \xcf - это 207 сивмол то есть большая буква "П" в ср1251) '\xcf\xee\xf1\xf2\xe0\xe2\xea\xe0 \xf0\xe0\xe4\xe8\xee\xf1\xf2\xe0\xed\xf6\xe8\xe9' (это 2 слова "Поставка радиостанций")
либо u'\u041f\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0440\u0430\u0434\u0438\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0439' в случае если постивить флаг use_unicode=True в фунции MySQLdb.connect
Вопрос прост: как мне принтовать НЕ вот такое '\xcf\xee\xf1\xf2\xe0\xe2\xea\xe0 а номальные русские буквы???
есть конечно тупое и медленное решение: побуквенно для каждой буквы в стринге делать вот такое chr(ord(letter)) - но согласитесь - это не выход -о строка # -*- coding: cp1251 -*- не имеет к решению никакого отношения. -о пробовал менять encoding = "cp1251" в функции def setencoding(): в site.py (/usr/local/lib/python2.4/site.py) - не помогает правда sys.getdefaultencoding() после этого показывает cp1251 - но от этого не легче
Возможно решение состоит в том чтобы поменять sys.stdout.encoding которая на данные момент показывает мне ISO-8859-1, но проблема в том что это read only атрибут
вот мой тестовый скрипт
Код:
1 #!/usr/bin/env python 2 # -*- coding: cp1251 -*- 3 4 import MySQLdb,sys,codecs 5 6 #WR = codecs.getwriter("cp1251") 7 #sys.stdout = WR(sys.stdout,'replace') 8 9 #print `WR` + str(type(WR)) 10 11 print sys.stdout.encoding 12 print sys.getdefaultencoding() 13 14 #,charset="cp1251" 15 db = MySQLdb.connect(host="localhost",user="root",passwd="",db="tender",use_unicode=False,charset="cp1251") 16 17 c=db.cursor() 18 #c.execute("SET names cp1251") 19 c.execute("SELECT * FROM first_approx where ID = 117") 20 21 AllRows = c.fetchall() 22 23 for n in AllRows: 24 for x in n: 25 print type(x) 26 if (type(x) == unicode or type(x) == str): 27 # b = x.decode('cp1251') 28 b = x 29 for letter in x: 30 print str(ord(letter)) + " ", 31 32 print "\n=-=-\t"+`b` + ' :::: \n\n' 33 pass 34 break 35 print "\n==-=-=-=-=-=-=-=-=-=-=-=-=-\n" 36 37 c.close()
все сообщения ветви:
- 887 Python encoding Xiled | 24-Jun-2006, 17:18 | просмотров: 9466 ⇐ ◄
- 888 Python encoding Anabar | 26-Jun-2006, 22:51 | просмотров: 7121
О том как (правильно) написать сообщение...
Написать ответ
Время генерации страницы в секундах: 0.076