Стандартные библиотеки Python и Unicode - PullRequest
0 голосов
/ 26 апреля 2011

Я читал слева направо и по центру о юникоде и питоне.Я думаю, что понимаю, что такое кодирование / декодирование, но как только я пытаюсь использовать стандартный метод библиотеки, манипулирующий именем файла, я получаю печально известную:

 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 19:
 ordinal not in range(128)

В этом случае \ xe9 обозначает 'é', и не имеет значения, если я вызываю его из os.path.join () или shutil.copy (), он выдает ту же ошибку.Насколько я понимаю, это связано с кодировкой Python по умолчанию.Я пытаюсь изменить его на:

# -*- coding: utf-8 -*- 

Ничего не меняется.Если я наберу:

sys.setdefaultencoding('utf-8')

, он скажет мне:

ImportError: cannot import name setdefaultencoding

Что я действительно не понимаю, так это то, почему это работает, когда я набираю его в терминале, '\ xe9' ивсе.Может кто-нибудь объяснить мне, почему это происходит / как обойти это?

Спасибо

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

Имена файлов в * nix нельзя манипулировать как unicode.Имя файла должно быть закодировано так, чтобы оно соответствовало кодировке файловой системы , а затем использовалось.

1 голос
/ 26 апреля 2011

Вы не должны касаться кодировки по умолчанию.Рекомендуется хранить его с помощью 'ascii' и правильно преобразовывать данные в utf-8 на стороне вывода.

1 голос
/ 26 апреля 2011

Вы должны вручную декодировать имя файла с правильной кодировкой (latin1?) перед os.path.join

btw: # - - кодирование: utf-8 - - относится к строковым литералам в вашем .py файле

effbot содержит полезную информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...