Python open () Unicode имя файла поведение отличается в разных ОС - PullRequest
5 голосов
/ 29 февраля 2012

С именем файла, похожим на:

filename = u"/direc/tories/español.jpg"

И используя open () как:

fp = open(filename, "rb")

Это откроет файл правильно в OSX (10.7), но в Ubuntu 11.04функция open () попытается открыть u"espa\xf1ol.jpg", и это приведет к ошибке IOError.

В процессе попытки исправить это я установил sys.getfilesystemencoding() в обеих системах, обе установлены на utf-8 (хотя Ubuntu сообщает верхний регистр, то есть UTF-8, не уверен, что это актуально),Я также установил # -*- coding: utf-8 -*- в файле python, но я уверен, что это влияет только на кодировку внутри самого файла, а не на какие-либо внешние функции или на то, как python работает с системными ресурсами.Файл существует в обеих системах с правильно отображенным eñe.

Последний вопрос: как открыть файл español.jpg в системе Ubuntu?

Редактировать: строка español.jpgна самом деле выходит из базы данных через ORM Джанго (ImageFileField), но к тому времени, когда я имею дело с этим и вижу разницу в поведении, у меня есть единственная строка юникода, которая является абсолютным путем к файлу.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Этот ниже должен работать в обоих случаях:

fp = open(filename.encode(sys.getfilesystemencoding()), "rb")
1 голос
/ 29 февраля 2012

Недостаточно просто установить кодировку файла в верхней части вашего файла. Убедитесь, что ваш редактор использует ту же кодировку и сохраняет текст в этой кодировке. При необходимости еще раз введите любые символы, отличные от ascii, чтобы убедиться, что ваш редактор работает правильно.

Если ваша ценность исходит, например, от базу данных, вам все равно нужно будет убедиться, что нигде вдоль линии не кодируется как не-Unicode.

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