Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2011 14:15:49

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

есть например код(взят отсюда 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)

подскажите пожалуйста что и как нужно настроить, чтоб заработало



Офлайн

#2 Май 28, 2011 14:42:02

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

А вы то что вокруг этого примера читать пробовали?

Там сказано, что питон конвертирует уникодные имена в ту кодировку, каторая настроенная в ОС. У вас эта кодировка ASCII. А она, не может переварить символы которые не влезают в 128 первых.



Офлайн

#3 Май 28, 2011 14:44:01

m.meehalkoff
От:
Зарегистрирован: 2011-01-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

Ubuntu 11.04, Python 2.7.1:
Ошибок нет, но в имени файла присутствует эта кракозябра :)

u"/u4500" == 䔀
Системная кодировка utf-8



Отредактировано (Май 28, 2011 14:44:58)

Офлайн

#4 Май 28, 2011 15:14:57

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

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

Там сказано, что питон конвертирует уникодные имена в ту кодировку, каторая настроенная в ОС. У вас эта кодировка ASCII. А она, не может переварить символы которые не влезают в 128 первых.
я и спрашиваю, что конкретно нужно поменять и где, чтобы поменять кодировку. Что делать с этими LANG or LC_CTYPE?



Офлайн

#5 Май 28, 2011 18:11:00

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

у меня работает (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')

Офлайн

#6 Май 28, 2011 18:56:04

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Linux, Python и имена файлов в unicode

нужно было установить локаль и задать соответственно переменную окружения LANG

для Debian и Ubuntu:

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version