Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2007 20:19:34

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Как же заставить её, в конце концов, спокойно отдавать русские строки уже ведь имеющиеся в базе?
Записать-то пожалуйста записывай сколько хошь.
А вот взять fetchone'ом или fetchall'ом - шиш!
Не могу, говорит перекодировать строку в UTF-8. Да ещё издевательски пишет эту самую строку НА РУССКОМ без крякозябров в тексте ошибки. А кто, спрашивается, вообще, тебя просит чего-то перекодировать? Выдавай, мерзавка, как есть!
Откроешь простым блокнотом базу - вот они мои строки-значения полей родимые. Все на русском и читаемы.
Чего делать?



Офлайн

#2 Ноя. 2, 2007 21:20:00

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

Sqlite3 и русская кодировка букв

Заносить в базу надо все в юникоде.
То, что удается заносить в cp1251 (как в твоем случае), это баг (недосмотр разработчиков), а не фича.



Офлайн

#3 Ноя. 3, 2007 00:44:35

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Sqlite3 и русская кодировка букв

Угу. Пора забывать о кодировках. Оставить unicode и utf8. Остальные не существуют, пока явно не потребовалось их присутствие



Офлайн

#4 Ноя. 3, 2007 17:57:26

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.

И ещё. Если данные вносятся, допустим, в текстконтроль (wxPython), то как указать, что буковки должны быть в юникоде?



Офлайн

#5 Ноя. 3, 2007 19:25:34

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

Sqlite3 и русская кодировка букв

FoxPython
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.
никогда не читал xls питоном, но вообще сам xls в юникоде.
а преобразовывать строку в юникодныю можно еще и так: unicode(s), или в тяжелом случае так: s.decode('cp1251')

Вобще рекомендую один раз разобратся с кодировками.
Пригодится. =)
Следует обратить внимание на 4 вещи:
1. кодировка питоновского файла
2. заголовок файла (# -*- coding: UTF8 -*-)
3. вводимые данные
4. выводимые данные (кодировка консоли, окна и т.п.)



Отредактировано (Ноя. 3, 2007 19:28:57)

Офлайн

#6 Ноя. 3, 2007 21:22:43

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?

xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.



Офлайн

#7 Ноя. 3, 2007 21:51:33

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

Sqlite3 и русская кодировка букв

FoxPython
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?

xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
эм? что за окно?
И как выводим?



Отредактировано (Ноя. 3, 2007 21:54:14)

Офлайн

#8 Ноя. 4, 2007 18:47:56

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Фрейм созданный с помощью wx.Python
Вобщем, я уж мало-мало сам разобрался с этими чёртовыми кодировками. Всё так неудобно! Может, всё-таки, есть более цивильный способ?

Получается, если хочешь без проблем заносить русские строки в базу и читать их оттудова, нужно указать # -*- coding: utf-8 -*-
Но это попортит строки, которые используются на кнопках, заголовках окон, статиктекстах wx.Python'а. Тут потребуется для каждой кнопки и т.д. приписывать к строковому значению button=wx.Button(mypanel, -1 , ‘Русская строка’.decode('utf-8')).

Если указывать # -*- coding: cp1251 -*- то тогда перед каждым строковым значением заносимым в базу нужно будет писать буковку u, указывая, что это юникод-строка. А если строка получена из текстконтроля, чойса и т.д. то каждый раз перекодировать её в utf-8, чтоб можно было запихать её в базу.

Ой, как всё неудобно!



Офлайн

#9 Ноя. 4, 2007 21:36:12

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Sqlite3 и русская кодировка букв

вообще-то все не так мрачно.
В базе данных - все в unicode.
В файлах с кодом - # -*- coding: utf-8 -*- и все строки с префиксом ‘u’.
wxPython поставить в unicode сборке. И ничего не нужно будет перекодировать



Офлайн

#10 Ноя. 11, 2007 16:51:06

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3 и русская кодировка букв

Андрей Светлов
Не нужно делать ВСЕ строки с префиксом u

Короче так, для нормальной работы с sqlite и wx.Python нужно:

В тексте программы указать # -*- coding: utf-8 -*-
тогда все строки используемые для ввода в базу данных можно вводить как есть, без всяких префиксов.

Но, для оператора print, и для wx.Python'а (заголовки окон, текст на кнопках и т.д.) нужно будет использовать префикс u
пример: stroka=u'юникод-строка'.
—————————————————————————————
Можно наоборот. Указать # -*- coding: cp1251 -*-
И тогда все строки вносимые в базу данных должны иметь префикс u
А строки для print и wx.Python используются без префикса.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version