Найти - Пользователи
Полная версия: Python+MySQL и кирилица
Начало » Базы данных » Python+MySQL и кирилица
1 2
Polines
Зашел на отдаленную 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]
ZerG
в начало файла
# -*- coding: utf-8 -*-

Гуглинг python+utf-8
Polines
ZerG
в начало файла # -*- coding: utf-8 -*-Гуглинг python+utf-8

есть в начале:
# -*- coding: utf-8 -*-
было
# -*- coding: utf-8

все равно не идет
4kpt_III
Естественно…

print(repr(vec[5]).decode("unicode_escape"))
Polines
4kpt_III
Естественно…
Спасибо, получилось!
Это значит, что та MySQL база не на utf8 а на unicode ?
Polines
Теперь выводит так:
(u'Вашингтон и Гавана договорились об открытии посольств',)
Как убрать (u' ?
JOHN_16
Polines
и это нормально. и это хорошо. ПОтому что в питоне есть такие str и unicode объекты. Не переживайте, все нормально.

Polines
Это значит, что та MySQL база не на utf8 а на unicode ?
а по вашему utf-8 это не Unicode ?
Без знаний основ Python вы не поймете в чем дело. Опять же речь о том что такое str и unicode

Polines
Как убрать (u' ?
ну если прям хотите, то переведите в строку полученное ранее значение. Вот быстрый пример:
>>> su = u'Мир не унылое говно, просто я не в настроении'
>>> su
u'\u041c\u0438\u0440 \u043d\u0435 \u0443\u043d\u044b\u043b\u043e\u0435 \u0433\u0
43e\u0432\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u044f \u043d\u0435
\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438'
>>> print su
Мир не унылое говно, просто я не в настроении
>>> su.encode('utf-8')  # вот тут указывается желаемая вами кодировка
'\xd0\x9c\xd0\xb8\xd1\x80 \xd0\xbd\xd0\xb5 \xd1\x83\xd0\xbd\xd1\x8b\xd0\xbb\xd0\
xbe\xd0\xb5 \xd0\xb3\xd0\xbe\xd0\xb2\xd0\xbd\xd0\xbe, \xd0\xbf\xd1\x80\xd0\xbe\x
d1\x81\xd1\x82\xd0\xbe \xd1\x8f \xd0\xbd\xd0\xb5 \xd0\xb2 \xd0\xbd\xd0\xb0\xd1\x
81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb8'
py.user.next
JOHN_16
а по вашему utf-8 это не Unicode ?
utf-8 - это не unicode, а одна из его кодировок (функция, отображающая последовательность октетов на кодовую точку).

Если, например, исходный код на питоне сохранить в кодировке koi8-r, сверху поставить объявление koi8-r и использовать юникодовые строки с русским языком, то кодировки utf-8 там не будет вообще.
JOHN_16
py.user.next
Вот только счаз заметил оплошность в собственном сообщении. Естественно речь, во-первых, не об Python объектах Unicode. Во вторых,все именно так, как вы и описали, дело в том, что UTF-8 это кодировка, но настолько вошедшая в жизнь, что стала неким синонимом понятия unicode - потому что, пусть и ценой лишних байт, может закодировать в себе достаточно символов для решения подавляющего большинства всех прикладных задач.
JOHN_16
Совсем другое дело что ТС, вполне возможно, и половины этого не понимает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB