Найти - Пользователи
Полная версия: Sqlite3 и русская кодировка букв
Начало » Базы данных » Sqlite3 и русская кодировка букв
1 2
FoxPython
Как же заставить её, в конце концов, спокойно отдавать русские строки уже ведь имеющиеся в базе?
Записать-то пожалуйста записывай сколько хошь.
А вот взять fetchone'ом или fetchall'ом - шиш!
Не могу, говорит перекодировать строку в UTF-8. Да ещё издевательски пишет эту самую строку НА РУССКОМ без крякозябров в тексте ошибки. А кто, спрашивается, вообще, тебя просит чего-то перекодировать? Выдавай, мерзавка, как есть!
Откроешь простым блокнотом базу - вот они мои строки-значения полей родимые. Все на русском и читаемы.
Чего делать?
shiza
Заносить в базу надо все в юникоде.
То, что удается заносить в cp1251 (как в твоем случае), это баг (недосмотр разработчиков), а не фича.
Андрей Светлов
Угу. Пора забывать о кодировках. Оставить unicode и utf8. Остальные не существуют, пока явно не потребовалось их присутствие
FoxPython
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.

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

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

xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
shiza
FoxPython
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?

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

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

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

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

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

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

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