FoxPython
Ноя. 2, 2007 20:19:34
Как же заставить её, в конце концов, спокойно отдавать русские строки уже ведь имеющиеся в базе?
Записать-то пожалуйста записывай сколько хошь.
А вот взять fetchone'ом или fetchall'ом - шиш!
Не могу, говорит перекодировать строку в UTF-8. Да ещё издевательски пишет эту самую строку НА РУССКОМ без крякозябров в тексте ошибки. А кто, спрашивается, вообще, тебя просит чего-то перекодировать? Выдавай, мерзавка, как есть!
Откроешь простым блокнотом базу - вот они мои строки-значения полей родимые. Все на русском и читаемы.
Чего делать?
shiza
Ноя. 2, 2007 21:20:00
Заносить в базу надо все в юникоде.
То, что удается заносить в cp1251 (как в твоем случае), это баг (недосмотр разработчиков), а не фича.
Андрей Светлов
Ноя. 3, 2007 00:44:35
Угу. Пора забывать о кодировках. Оставить unicode и utf8. Остальные не существуют, пока явно не потребовалось их присутствие
FoxPython
Ноя. 3, 2007 17:57:26
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.
И ещё. Если данные вносятся, допустим, в текстконтроль (wxPython), то как указать, что буковки должны быть в юникоде?
shiza
Ноя. 3, 2007 19:25:34
FoxPython
Это мне перед каждым значением строковой переменной букву u писать (u'Бадяка-Маняка'), прежде чем в базу запихивать?
А если потом, как-нибудь, приспичит табличку из базы, к примеру, в xls-лист загнать? С кодировками всё равно мучиться придётся.
По-моему, так неудобно.
никогда не читал xls питоном, но вообще сам xls в юникоде.
а преобразовывать строку в юникодныю можно еще и так: unicode(s), или в тяжелом случае так: s.decode('cp1251')
Вобще рекомендую один раз разобратся с кодировками.
Пригодится. =)
Следует обратить внимание на 4 вещи:
1. кодировка питоновского файла
2. заголовок файла (# -*- coding: UTF8 -*-)
3. вводимые данные
4. выводимые данные (кодировка консоли, окна и т.п.)
FoxPython
Ноя. 3, 2007 21:22:43
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?
xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
shiza
Ноя. 3, 2007 21:51:33
FoxPython
shiza
coding: UTF-8 превратил в крякозябры название окна-фрейма (caption)
Как это преодолеть-то?
xls питоном мне читать не нужно, но, возможно, понадобится из скулайт-базы экспортировать табличку-запрос в xls-листок. Для требуемых злыми дядями отчётностей в этом формате.
эм? что за окно?
И как выводим?
FoxPython
Ноя. 4, 2007 18:47:56
Фрейм созданный с помощью wx.Python
Вобщем, я уж мало-мало сам разобрался с этими чёртовыми кодировками. Всё так неудобно! Может, всё-таки, есть более цивильный способ?
Получается, если хочешь без проблем заносить русские строки в базу и читать их оттудова, нужно указать # -*- coding: utf-8 -*-
Но это попортит строки, которые используются на кнопках, заголовках окон, статиктекстах wx.Python'а. Тут потребуется для каждой кнопки и т.д. приписывать к строковому значению button=wx.Button(mypanel, -1 , ‘Русская строка’.decode('utf-8')).
Если указывать # -*- coding: cp1251 -*- то тогда перед каждым строковым значением заносимым в базу нужно будет писать буковку u, указывая, что это юникод-строка. А если строка получена из текстконтроля, чойса и т.д. то каждый раз перекодировать её в utf-8, чтоб можно было запихать её в базу.
Ой, как всё неудобно!
Андрей Светлов
Ноя. 4, 2007 21:36:12
вообще-то все не так мрачно.
В базе данных - все в unicode.
В файлах с кодом - # -*- coding: utf-8 -*- и все строки с префиксом ‘u’.
wxPython поставить в unicode сборке. И ничего не нужно будет перекодировать
FoxPython
Ноя. 11, 2007 16:51:06
Андрей Светлов
Не нужно делать ВСЕ строки с префиксом u
Короче так, для нормальной работы с sqlite и wx.Python нужно:
В тексте программы указать # -*- coding: utf-8 -*-
тогда все строки используемые для ввода в базу данных можно вводить как есть, без всяких префиксов.
Но, для оператора print, и для wx.Python'а (заголовки окон, текст на кнопках и т.д.) нужно будет использовать префикс u
пример: stroka=u'юникод-строка'.
—————————————————————————————
Можно наоборот. Указать # -*- coding: cp1251 -*-
И тогда все строки вносимые в базу данных должны иметь префикс u
А строки для print и wx.Python используются без префикса.