Найти - Пользователи
Полная версия: Хочу победить UnicodeEncodeError
Начало » Python для новичков » Хочу победить UnicodeEncodeError
1
Natik
Всем доброго дня!
Прошу вашей помощи в решении проблемы ниже.

Предыстория: общая задача состоит в том, что нужно копировать файлы с одного фтп на другой фтп, следуя некоторым правилам (нужно копировать файлы определенного формата, раскладывать их по определенным папкам и т.д.). Скрипт написан и работает, но иногда падает, когда в названии файла встречаются русские буквы или символы вида ñ.

Создала тестовый пример:
# -*- coding: cp866 -*-
import os
list = os.listdir('D:\\Test')
for filename in list:
	print(filename)
В папке D:\Test находится файл с названием deñ.txt

При выполнении получаю ошибку:
File "C:\Python33\lib\encodings\cp866.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xf1' in position 2:
character maps to <undefined>
Если поменять в скрипте
print(filename.encode('cp1251', 'ignore'))
при выполнении получаю:
b'de.txt'

Если создать аналогичный тестовый пример на C#:
string[] filePaths = Directory.GetFiles(@"D:\Test");
foreach (string filePath in filePaths)
{
Console.WriteLine(filePath);
}
то при выполнении получу
D:\Test\den.txt

Вопрос: как сделать, чтобы на Python'е также выдавался den.txt, а не b'de.txt'?
noob_saibot
Странно у меня:
import os
list = os.listdir('D:\\Test')
for filename in list:
	print(filename)
Выдает:
den.txt
(W7 64 Python 2.7)

Какой у вас питон, какая винда, какая кодировка по умолчанию? Может в этом проблема…
Natik
Спасибо за ответ!
У меня W7 64 Python 3.3.2

Попробовала так:
# -*- coding: cp866 -*-
import os
f = open('D:\\555\\log.txt', 'wb')
list = os.listdir('D:\\Test')
for filename in list:
	filename = filename.encode('utf-8', 'ignore')
	f.write(filename)
	f.close()
В log.txt записалось: deñ.txt

Это решает мою проблему
noob_saibot
Задача решилась, а вот проблема не ушла, ну да ладно))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB