Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2012 03:24:36

vovane
От:
Зарегистрирован: 2011-09-24
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

Когда получаю путь к домашней папке пользователя с помощью

os.path.expanduser('~')
или даже так:
homefolder = (os.getenv('HOME'))
if homefolder == "None":
homefolder = os.getenv('USERPROFILE')
то sqlite3 пишет, что не может получить доступ к базе данных в строке с созданием подключения. У меня имя пользователя на латинице, и все работает, а вот у друга с русским логином падает. Как заставить sqlite3 подключаться к базе данных в папке с русскими символами в имени? Семерка же вроде как использует юникод, то есть особо проблем быть не должно. Если есть идеи насчет ХР и прочих - давайте, тоже пригодится.
Заранее спасибо.
P.S.: честно гуглил и искал на форуме :)



Офлайн

#2 Фев. 24, 2012 07:26:32

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

Попробуйте

homefolder = homefolder.decode(sys.getfilesystemencoding())



Офлайн

#3 Фев. 26, 2012 12:14:56

vovane
От:
Зарегистрирован: 2011-09-24
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

pyuser
Попробуйте
homefolder = homefolder.decode(sys.getfilesystemencoding())
Спасибо за ответ, но не сработало. Пишет:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 9-15: ordinal not in range(128)

Я правильно понимаю, что система сообщает что использует ASCII для имен файлов, а decode натыкается при этом на кириллицу и выдает ошибку?



Офлайн

#4 Фев. 26, 2012 16:00:40

SergMare
От:
Зарегистрирован: 2012-02-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

vovane
pyuser
Попробуйте
homefolder = homefolder.decode(sys.getfilesystemencoding())
Спасибо за ответ, но не сработало. Пишет:
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 9-15: ordinal not in range(128)

Я правильно понимаю, что система сообщает что использует ASCII для имен файлов, а decode натыкается при этом на кириллицу и выдает ошибку?
В самом начале файла(1 строка) поставь
## -*- coding: cp1251 -*-
далее я использую следующую конструкцию:
import sys
reload( sys )
sys.setdefaultencoding( 'cp1251' )
это перед всеми импортами
У меня это прокатывает



Офлайн

#5 Фев. 26, 2012 16:35:32

vovane
От:
Зарегистрирован: 2011-09-24
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

В семерке от 1251 разве не отошли? Да и кроме того, должен же быть какой-то другой способ. Странно еще вот что - создал учетку с русским именем, и прога спокойно запустилась. Косяк явно в чем-то другом, использовал все тот же

homefolder = homefolder.decode(sys.getfilesystemencoding())
и работает как часы, но только у меня.



Офлайн

#6 Фев. 26, 2012 16:53:23

SergMare
От:
Зарегистрирован: 2012-02-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

vovane
В семерке от 1251 разве не отошли?
А Вы только для семерки программы создаете? сейчас соотношение систем примерно 50 на 50. Причем ХР встречается достаточно часто.



Офлайн

#7 Фев. 26, 2012 17:41:21

vovane
От:
Зарегистрирован: 2011-09-24
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

SergMare
vovane
В семерке от 1251 разве не отошли?
А Вы только для семерки программы создаете? сейчас соотношение систем примерно 50 на 50. Причем ХР встречается достаточно часто.
Нет, почему же. Просто прогу пишу чисто для себя, да и она у меня первая серьезная на питоне:) А так, самым главным при написании её у меня было, чтобы она без модификации кода запускалась как на семёрке (ноут), так и на Maemo (мобильник).



Отредактировано (Фев. 26, 2012 17:42:20)

Офлайн

#8 Фев. 28, 2012 19:12:39

SergMare
От:
Зарегистрирован: 2012-02-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Путь к домашней папке в локализованной винде и sqlite3

Вообщем если нет определенного кодинга в начале модуля питона (## -*- coding: cp1251 -*-), питон по умолчанию обрабатывает строки в ‘ascii.
Именно поэтому возникают ошибки в Вашем случае.
Кодировку естественно можно выбрать любую (попробуйте например ’utf8'), но оптимальная для винды именно 1251, конкретно в нашем региональном случае.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version