Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2015 16:37:23

Polines
Зарегистрирован: 2015-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

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]

Отредактировано Polines (Окт. 20, 2015 16:37:54)

Офлайн

#2 Окт. 20, 2015 16:54:18

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

в начало файла
# -*- coding: utf-8 -*-

Гуглинг python+utf-8



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Окт. 20, 2015 17:01:51

Polines
Зарегистрирован: 2015-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

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

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

все равно не идет

Офлайн

#4 Окт. 20, 2015 17:16:25

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

Естественно…

print(repr(vec[5]).decode("unicode_escape"))

Отредактировано 4kpt_III (Окт. 20, 2015 17:17:06)

Офлайн

#5 Окт. 20, 2015 17:25:46

Polines
Зарегистрирован: 2015-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

4kpt_III
Естественно…
Спасибо, получилось!
Это значит, что та MySQL база не на utf8 а на unicode ?

Офлайн

#6 Окт. 20, 2015 17:35:24

Polines
Зарегистрирован: 2015-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

Теперь выводит так:

(u'Вашингтон и Гавана договорились об открытии посольств',)
Как убрать (u' ?

Офлайн

#7 Окт. 21, 2015 00:30:06

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

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'



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Окт. 21, 2015 12:03:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

JOHN_16
а по вашему utf-8 это не Unicode ?
utf-8 - это не unicode, а одна из его кодировок (функция, отображающая последовательность октетов на кодовую точку).

Если, например, исходный код на питоне сохранить в кодировке koi8-r, сверху поставить объявление koi8-r и использовать юникодовые строки с русским языком, то кодировки utf-8 там не будет вообще.



Отредактировано py.user.next (Окт. 21, 2015 12:04:23)

Офлайн

#9 Окт. 21, 2015 14:11:10

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

py.user.next
Вот только счаз заметил оплошность в собственном сообщении. Естественно речь, во-первых, не об Python объектах Unicode. Во вторых,все именно так, как вы и описали, дело в том, что UTF-8 это кодировка, но настолько вошедшая в жизнь, что стала неким синонимом понятия unicode - потому что, пусть и ценой лишних байт, может закодировать в себе достаточно символов для решения подавляющего большинства всех прикладных задач.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#10 Окт. 21, 2015 14:12:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python+MySQL и кирилица

Совсем другое дело что ТС, вполне возможно, и половины этого не понимает.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version