×

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

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Власне зайшов на віддалену 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]
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
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.

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

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

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

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

.

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

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