Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2007 14:34:46

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

webchemist
Т.е. вывод - оба ORM-a неправильно осуществляют перекодировку. Вопрос - что делать? Настройки какие только не ставил…
Используй поле Unicode или перекодируй сам.
#!/usr/bin/python
# -*- coding: utf-8 -*-
from sqlalchemy import *
db = create_engine('mysql://root@localhost/py')
metadata = MetaData(db)
test = Table('test', metadata,
             Column('username', String(40)))
metadata.create_all()
test.insert().execute(username=u'тект на русском'.encode('utf-8'))
for u in test.select().execute():
    print u[0]
Результат:
bash-3.2$ ./test.py
тект на русском
bash-3.2$ ./test.py
тект на русском
тект на русском
bash-3.2$



Офлайн

#2 Авг. 16, 2007 16:17:06

webchemist
От:
Зарегистрирован: 2007-03-20
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

slivlen
Проблема не в том, чтобы вставить юникодовую строку так, чтобы в базе получился UTF-8. Проблема в том, что я не могу из базы прочитать данные, которые там хранятся в UTF-8. Возвращаются вопросики или тарабарщина…

Ваш пример в базу записал строки вида “Ñ‚ÐµÐºÑ‚ на Ñ?уÑ�Ñ�ком”, которые так и выводятся. Если заменить Column('username', String(40))) на Column('username', Unicode(40))) - начинают выводится как “тект на русском”
Если сделать после подключения db.execute('SET NAMES UTF8') - строки вставляются и выводятся в UTF-8.

Если вместо name=u'ткcт на русском'.encode('UTF-8') сделать просто name=u'ткcт на русском' ситуация не меняется

Блин, уже почти два дня убил…
Попробывал Storm - походу интересный ORM. Но и здесь проблема есть, правда иного рода: по умолчанию опять же имею вопросики в выводе. Если же после подключения делаю запрос на базу вида “SET NAMES UTF8”, возвращает строки вида “Ð¼Ð°Ð¼Ð°”.



Отредактировано (Авг. 16, 2007 16:35:33)

Офлайн

#3 Авг. 16, 2007 16:58:27

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

webchemist
Проблема в том, что я не могу из базы прочитать данные, которые там хранятся в UTF-8.
Так в моем примере данные не только вносятся в базу, но и извлекаются из нее. И как видишь проблем с выводом у меня не наблюдается.
Вот что будет если использовать для просмотра утилиту mysql
bash-3.2# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 32
Server version: 5.0.37 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use py
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from test;
+------------------------------+
| username |
+------------------------------+
| тект на русском |
| тект на русском |
+------------------------------+
2 rows in set (0.00 sec)

mysql>
Возможно у тебя в системе другая кодировка(у меня utf-8), попробуй перекодировать извлеченные данные в системную кодировку перед выводом.



Офлайн

#4 Авг. 16, 2007 17:13:21

webchemist
От:
Зарегистрирован: 2007-03-20
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

А какое значение имеет системная (это в смысле ОС или что?) кодировка? Ведь везде кодирвка указывается явно. Тестировал походу в Python Shell, там вроде UTF-8

Кстати, как при использовании SAContext и SQLAlchemy выволнить прямой запрос на базу?



Отредактировано (Авг. 16, 2007 18:05:52)

Офлайн

#5 Авг. 16, 2007 18:33:48

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

webchemist
А какое значение имеет системная (это в смысле ОС или что?) кодировка? Ведь везде кодирвка указывается явно. Тестировал походу в Python Shell, там вроде UTF-8
Системная кодировка - это кодировка в твоей ОС. То, что везде указана кодировка еще не означает, что все в нее автоматически перекодируется(Для примера открой файл с русским текстом созданный блокнотом в винде и попробуй вывести его содержимое в питоновском шелле) :) Кодировка питоновского шелла такая же как и системная.



Офлайн

#6 Авг. 16, 2007 23:59:25

webchemist
От:
Зарегистрирован: 2007-03-20
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

slivlen
У шелла видимо ansi. Впрочем все-равно не понимаю, как может системная кодировка здесь как-то повлиять. Ведь киррилические строки не просто *отображаются* неверно, они бьются - т.е. на некой стадии происходит неверное преобразование “юникод-некая кодировка”. Т.е. где-то они интерпретируются не как UTF-8, а как ansi (вероятно), соответственно вся кириллица перекодируется х.з. как. Почему так происходит и кто виноват - не постигаю. В первый раз сталкиваюсь с таким поведением - впрочем, и юникод раньше не использовал в проектах.
То же кстати интересный момент: как я уже говорил, при вставке строк name=u'ткcт на русском'.encode('UTF-8') или name=u'ткcт на русском' в базе сохранятеся одно и то же.

Кстати, Storm даже при прямом установлении кодировки не удалось заставить работать правильно. А жаль, понравился.

В общем остановился пока на варианте с чистой SQLAlchemy с явным вызовом SET NAMES - проект то надо делать… Пришлось выкинуть SAContext и настройку через Pylons config. Но проблема, увы, не решена…



Офлайн

#7 Авг. 27, 2007 20:56:37

webchemist
От:
Зарегистрирован: 2007-03-20
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

Всем спасибо! Пока что решил так - в DSN прописал ?charset=UTF8. Работает.



Офлайн

#8 Авг. 28, 2007 19:12:32

kch
От:
Зарегистрирован: 2007-08-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

У меня такая-же проблема.
Добавил

webchemist
в DSN прописал ?charset=UTF8. Работает.
но только при выводе текста, при его добавлении все равно ругается, что не правильная кодировка!

Хотя все это в Gentoo работало, а в Ubuntu такая беда.

В чем дело??



Офлайн

#9 Сен. 3, 2007 23:05:36

webchemist
От:
Зарегистрирован: 2007-03-20
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Pylons, SQLALchemy, кодировка - UTF-8 - выводит ?????

kch
Хотя все это в Gentoo работало, а в Ubuntu такая беда.
А как строки попадают в базу? В коде (типа тест), шелл или через некую форму?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version