Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2011 17:01:13

alebezh
От:
Зарегистрирован: 2011-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка, SQLite

Пытаюсь вывести текст print'ом из sqlite. Получаю:

\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.
В начале скрипта прописано:
# -*- coding: utf-8 -*-
print “Привет” выводит Привет



Офлайн

#2 Дек. 16, 2011 17:45:51

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Кодировка, SQLite

ось какая?
print s.encode('utf8')
print s.encode('cp1251')

Офлайн

#3 Дек. 16, 2011 18:28:32

alebezh
От:
Зарегистрирован: 2011-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка, SQLite

ось какая?
Mac OS



Офлайн

#4 Дек. 16, 2011 23:35:10

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

Кодировка, SQLite

>>> s = u'\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432'
>>> print s
Рассмотрена проблема оптимизации расходов на создание программных средств за счет перераспределения ресурсов
>>> s = '\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432'
>>> print s
\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432
>>>



Офлайн

#5 Дек. 17, 2011 11:35:28

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Кодировка, SQLite

Добавьте букву “u” к строке перед вторым print.



Офлайн

#6 Дек. 18, 2011 15:34:03

alebezh
От:
Зарегистрирован: 2011-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка, SQLite

print s.encode('utf8')
Выводит то же самое(

Добавьте букву “u” к строке перед вторым print.
Со строкой работает, но значения хранятся в переменной.



Офлайн

#7 Дек. 18, 2011 16:13:09

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Кодировка, SQLite

Версия SQLite?
Строки хранятся в поле типа TEXT с кодировкой UTF-8?

Что выведет питон:
type(s)
unicode(s)
tmp=unicode(s)
type(tmp)



Офлайн

#8 Дек. 18, 2011 17:18:12

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Кодировка, SQLite

>>> s = '\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432'
>>> print s.decode('unicode_escape')
Рассмотрена проблема оптимизации расходов на создание программных средств за счет перераспределения ресурсов
А ещё посмотрите http://docs.python.org/library/sqlite3.html#sqlite3.Connection.text_factory
попробуйте установить con.text_factory = str



Офлайн

#9 Дек. 18, 2011 17:24:29

alebezh
От:
Зарегистрирован: 2011-12-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка, SQLite

type(s) - <type ‘str’>
unicode(s) - UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 3: ordinal not in range(128)
type(tmp) - <type ‘unicode’>



Офлайн

#10 Дек. 18, 2011 18:44:41

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Кодировка, SQLite

похоже в базу строки криво записаны в виде “unicode_escape”

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version