Найти - Пользователи
Полная версия: Linux, Python и имена файлов в unicode
Начало » Python для новичков » Linux, Python и имена файлов в unicode
1
appetito
есть например код(взят отсюда http://docs.python.org/release/2.6.6/howto/unicode.html#unicode-filenames):
filename = u'filename\u4500abc'
f = open(filename, 'w')
f.write('blah\n')
f.close()
на WinXP работает, на Debian, Ubuntu - UnicodeEncodeError: ‘ascii’ codec can't encode character u'\u4500' in position 8: ordinal not in range(128)

подскажите пожалуйста что и как нужно настроить, чтоб заработало
Александр Кошелев
А вы то что вокруг этого примера читать пробовали?

Там сказано, что питон конвертирует уникодные имена в ту кодировку, каторая настроенная в ОС. У вас эта кодировка ASCII. А она, не может переварить символы которые не влезают в 128 первых.
m.meehalkoff
Ubuntu 11.04, Python 2.7.1:
Ошибок нет, но в имени файла присутствует эта кракозябра :)
u"/u4500" == 䔀
Системная кодировка utf-8
appetito
Александр Кошелев
А вы то что вокруг этого примера читать пробовали?

Там сказано, что питон конвертирует уникодные имена в ту кодировку, каторая настроенная в ОС. У вас эта кодировка ASCII. А она, не может переварить символы которые не влезают в 128 первых.
я и спрашиваю, что конкретно нужно поменять и где, чтобы поменять кодировку. Что делать с этими LANG or LC_CTYPE?
o7412369815963
у меня работает (ubuntu 11.04 + py 2.7.1):
>>> fname = u'/tmp/filename\u4500abc'
>>> f = open(fname,'w')
>>> f.write('ok')
Походу у вас дефолтная кодировка не та.
В начале файла есть “# coding: utf8” ?

или попробуйте так:
f = open(fname.encode('utf8'),'w')
appetito
нужно было установить локаль и задать соответственно переменную окружения LANG

для Debian и Ubuntu:

localedef -i ru_RU-f UTF-8 ru_RU.UTF-8
export LANG=ru_RU.UTF-8
P.S.
Из-за этой фигни у меня на VDS Django не загружал файлы с кириллицей в имени. Теперь всё ОК.
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