Почему os.path.expanduser работает неправильно, если в домашнем каталоге есть специальные символы? - PullRequest
3 голосов
/ 29 сентября 2011

В настоящее время мой каталог пользователя находится в "C: \ Users \ João", и я использую 64-битную сборку Python 2.7 под Windows 7.

Обычно интерпретатор Python запускаетсяс 'ascii' в качестве кодировки по умолчанию.Однако по какой-то причине, когда Eclipse запускает его, кодировка по умолчанию - utf-8.Теперь в обычной консоли Python происходит следующее:

>>> sys.getdefaultencoding()
'ascii'
>>> os.path.expanduser('~/filename')
'C:\\Users\\Jo\xe3o/filename'
>>> x = open(_, 'w')
>>> x.close()
>>>

Я отмечу, что '\ xe3' - это код для ã как в Latin-1, так и в Windows-1252, и что всеидет нормально.Однако в Eclipse,

>>> sys.getdefaultencoding()
'utf-8'
>>> os.path.expanduser('~/filename')
'C:\\Users\\Jo\xc6o/filename'
>>> x = open(_, 'w')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: 'C:\\Users\\Jo\xc6o/filename'

, что сбивает с толку, поскольку '\ xc6' - это код символа для 'Æ', и, кроме того, недопустимый UTF-8.

Если вас интересует «Отказано в доступе», вместо «Нет такого файла или каталога», пара программ также записала материал в «C: \ Users \ JoÆo», и я также понятия не имею, почему.

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

TL;DR: Домашний каталог правильно отображается как «C: \ Users \ João» в стандартном интерпретаторе Python и как «C: \ Users \ JoÆo», когда интерпретатор работает в Eclipse.Почему?

1 Ответ

0 голосов
/ 05 ноября 2011

Попробуйте изменить кодировку Eclipse по умолчанию. Меню Файл: Windows -> Настройки; Tree Bar: General -> Workspace; Измените «Кодировка текстового файла» с Cp1252 на ISO-8859-1.

Вы также можете изменить его для конкретной конфигурации отладки, если откроете «Конфигурации отладки», перейдите на вкладку «Общие», измените «Кодировка».

Редактировать: Очень странно. Выполнение глобуса для "./J*" в каталоге с каталогом "João" отлично работает для меня в Eclipse с UTF-8 и Cp1252 (по умолчанию) в 64-битном Python 2.7.2, Windows 7.

UTF-8

[ '\ Jo \ xe3o']

CP1252:

[ '\ Jo \ xe3o']

...