Форум сайта python.su
Как же заставить её, в конце концов, спокойно отдавать русские строки уже ведь имеющиеся в базе?
Записать-то пожалуйста записывай сколько хошь.
А вот взять fetchone'ом или fetchall'ом - шиш!
Не могу, говорит перекодировать строку в UTF-8. Да ещё издевательски пишет эту самую строку НА РУССКОМ без крякозябров в тексте ошибки. А кто, спрашивается, вообще, тебя просит чего-то перекодировать? Выдавай, мерзавка, как есть!
Откроешь простым блокнотом базу - вот они мои строки-значения полей родимые. Все на русском и читаемы.
Чего делать?
Офлайн
Заносить в базу надо все в юникоде.
То, что удается заносить в cp1251 (как в твоем случае), это баг (недосмотр разработчиков), а не фича.
Офлайн
Угу. Пора забывать о кодировках. Оставить unicode и utf8. Остальные не существуют, пока явно не потребовалось их присутствие
Офлайн
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.
И ещё. Если данные вносятся, допустим, в текстконтроль (wxPython), то как указать, что буковки должны быть в юникоде?
Офлайн
FoxPythonникогда не читал xls питоном, но вообще сам xls в юникоде.
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.
Отредактировано (Ноя. 3, 2007 19:28:57)
Офлайн
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?
xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
Офлайн
FoxPythonэм? что за окно?
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?
xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
Отредактировано (Ноя. 3, 2007 21:54:14)
Офлайн
Фрейм созданный с помощью 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 сборке. И ничего не нужно будет перекодировать
Офлайн
Андрей Светлов
Не нужно делать ВСЕ строки с префиксом u
Короче так, для нормальной работы с sqlite и wx.Python нужно:
В тексте программы указать # -*- coding: utf-8 -*-
тогда все строки используемые для ввода в базу данных можно вводить как есть, без всяких префиксов.
Но, для оператора print, и для wx.Python'а (заголовки окон, текст на кнопках и т.д.) нужно будет использовать префикс u
пример: stroka=u'юникод-строка'.
—————————————————————————————
Можно наоборот. Указать # -*- coding: cp1251 -*-
И тогда все строки вносимые в базу данных должны иметь префикс u
А строки для print и wx.Python используются без префикса.
Офлайн