Python conf in Kharkiv, Nov 16 with Intel, Elastic engineering leaders. Prices go up 21.10

Python+MySQL і кирилиця

Власне зайшов на віддалену MySQL з-під Python, не читається кирилиця, виводить:

(u’\u0412\u0430\u0448\u0438\u043d\u0433\u0442\u043e\u043d \u0438 \u0413\u0430\u0432\u0430\u043d\u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438\u0441\u044c \u043e\u0431 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u043e\u0441\u043e\u043b\u044c\u0441\u0442\u0432′,)

сам код:

db=MySQLdb.connect(host="x.x.x.x", user="name", passwd="xxxx", db="nam", charset='utf8')
db.set_character_set('utf8')
db.query("""SELECT news_new.title FROM news_new""")
r=db.store_result()
vec = r.fetch_row(100)
print vec[5]
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

використовуєте другу версію Python?

у третій версії всюди використовується юнікод, можливо можна би було уникнути цієї проблеми

Пітон прямим текстом показує, що стрічка в utf. І текст там читається. З базою все нормально.

Пітон чомусь не хоче print-іти utf як utf. Чому? Тому що локаль не утфна.
LC_CTYPE=uk_UA.UTF-8, або en_US.UTF-8, або будь-яку іншу з UTF-8.

Я додав decode("unicode_escape")
print(repr(vec[5]).decode("unicode_escape"))

виводить тепер те що треба, але:
(u’Вашингтон и Гавана договорились об открытии посольств’,)

як забрати (u’ ,) і мати чистий текст?

Прибрати repr().

Всього іншого теж не треба, важливо лише дати знати Пітону що stdout може приймати utf-8.
stackoverflow.com/...n-piping-stdout-in-python
stackoverflow.com/...d-in-my-code-using-python
www.python.org/dev/peps/pep-0263

Прибрати repr().
тоді:
AttributeError: ’tuple’ object has no attribute ’decode’

тю, точно, дякую, все вийшло!

Напевно має значення як дані збережені в самі базі. Коли їх зберігали також бала бути

db.set_character_set(’utf8′)

Я в ПХП робив ще такий запит після приєднання
«SET NAMES utf8»
але це добре працює якщо додавання даних ішло при таких самих діях під час конекту

Адмін бази твердить, що там все utf8.

Може бути ситуація коли кодіровка бази ютф і таблиць також ютф а самі дані не в ютф.

з тією базою яким ще способом працюють? як додають дані?

попробуй добавить use_unicode=True в параметры .connect
stackoverflow.com/...ysql-unicode-and-encoding

Я хоть и не программер, но

utf8
выглядит малость подозрительно... думаю с кодировкой шаманить надо :-)

Якщо брати текст з локального файлу на кирилиці все ок, якщо з віддаленої MySQL, появляється така проблема.

Подписаться на комментарии