Проблема доказательств 1 ###
Выдает «UnicodeDecodeError: кодек« ascii »не может декодировать байт 0xc2 в позиции 2: порядковый номер не в диапазоне (128)» при выполнении следующего кода:
filename = 'Spywaj.ttf'
print repr(filename)
>> 'Sp\xc2\x88ywaj.ttf'
filepath = os.path.join('/dirname', filename)
Я не вижу, как можно получить это исключение - оба аргумента os.path.join являются объектами str. Нет причин пытаться преобразовать что-либо в Unicode. Вы уверены, что приведенный выше код является именно тем, что вы запустили?
Проблема доказательств 2
Предложение Алекса os.path.join теперь работает, но я все еще не могу получить доступ к файлу на диске с именем файла, к которому он присоединился.
filename = filename.decode('utf-8')
filepath = os.path.join('/dirname', filename)
print filepath
>> /dirname/u'Sp\xc2\x88ywaj.ttf'
Извините, если предположить, что filename
не изменился по сравнению с предыдущим фрагментом, это определенно невозможно. Это выглядит как результат os.path.join('/dirname', repr(filename))
... пожалуйста, убедитесь, что вы публикуете код, который вы на самом деле выполняли, вместе с фактическим выводом (и с фактической трассировкой, если есть).
Путаница
new_filepath = filepath.encode('Latin-1').encode('utf-8')
Алекс хотел попробовать дважды, каждый раз с одним из этих кодировок - не пытаться один раз с обоими кодировками! Поскольку все символы в filepath были в диапазоне ASCII (см. Доказательную проблему 2), эффект был просто filepath.encode ('ascii')
Простое решение
Вы знаете, как найти имя интересующего вас файла:
valid_filepath = glob.glob('/dirname/*.ttf')[0]
Если вам необходимо жестко закодировать это имя в вашем скрипте, вы можете использовать функцию repr (), чтобы получить представление, которое вы можете ввести в ваш скрипт, не беспокоясь о utf8, unicode, кодировании, декодировании и всем этом шуме:
print repr(valid_filepath)
Предположим, что он печатает '/dirname/Sp\xc2\x88ywaj.ttf'
... тогда все, что вам нужно сделать, это аккуратно скопировать и вставить его в ваш скрипт:
file_path = '/dirname/Sp\xc2\x88ywaj.ttf'