Some HAT...

= Анабар.ru => Python-форумы => Язык программирования Python => сообщение 887
| Вход | Регистрация
нет
фото
Автор:  Xiled
Дата:  24-Jun-2006 17:18 (gmt = -3)

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 | просмотров: 7139   <==
    • 888 Python encoding  Anabar  | 26-Jun-2006, 22:51 | просмотров: 5117

О том как (правильно) написать сообщение...

Написать ответ

* Ник    
E-mail   Получать ответы  
Ссылка (URL)   мин. уровень чтения  
Картинка (URL)   мин. уровень ответа  
* Тема ответа  
Текст сообщения (можно не заполнять)

Время генерации страницы в секундах: 0.541