С нескольких дней я борюсь с этой досадной проблемой с кодировкой файлов в моей маленькой программе на Python.Python: Ошибки кодирования файлов
Я много работаю с MediaWiki - недавно я конвертирую документы из .doc в Викитека.
Документ в формате Microsoft Word открывается в Libre Office, а затем экспортируется в файл .txt с форматом Викитека. Моя программа ищет тэг [[Image:]] и заменяет его именем изображения, взятого из списка, и этот механизм работает очень хорошо (большое спасибо за помощь brjaga!). Когда я сделал некоторые испытания на .txt файлов, созданных мной все работало нормально, но когда я положил файл .txt с Викитеками все это не так смешно: D
Я получил этот сообщение прома Python:
Traceback (most recent call last):
File "C:\Python33\final.py", line 15, in <module>
s = ' '.join([line.replace('\n', '') for line in myfile.readlines()])
File "C:\Python33\lib\encodings\cp1250.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 7389: character maps to <undefined>
и это мой код Python:
li = [
"[[Image:124_BPP_PL_PL_Page_03_Image_0001.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0002.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0003.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0004.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0005.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0006.jpg]]",
"[[Image:124_BPP_PL_PL_Page_03_Image_0007.jpg]]",
"[[Image:124_BPP_PL_PL_Page_05_Image_0001.jpg]]",
"[[Image:124_BPP_PL_PL_Page_05_Image_0002.jpg]]"
]
with open ("C:\\124_BPP_PL_PL.txt") as myfile:
s = ' '.join([line.replace('\n', '') for line in myfile.readlines()])
dest = open('C:\\124_BPP_PL_PL_processed.txt', 'w')
for item in li:
s = s.replace("[[Image:]]", item, 1)
dest.write(s)
dest.close()
ОК, так что я сделал некоторые исследования и обнаружил, что это проблема с кодировкой. Поэтому я установил программу Notepad ++ и изменил кодировку моего .txt-файла с помощью Wikisource на: UTF-8 и сохранил его. Тогда я сделал некоторые изменения в моем коде:
with open ("C:\\124_BPP_PL_PL.txt", encoding="utf8') as myfile:
s = ' '.join([line.replace('\n', '') for line in myfile.readlines()])
Но я получил это новое сообщение об ошибке:
Traceback (most recent call last):
File "C:\Python33\final.py", line 22, in <module>
dest.write(s)
File "C:\Python33\lib\encodings\cp1250.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to <undefined>
И я действительно застрял на этом. Я думал, когда я вручную меняю кодировку в Notepad ++, а затем я расскажу о кодировке, которую я установил, - все будет хорошо.
Пожалуйста, помогите, заблаговременно.
Какой кодек сделал Notepad ++ думаю, что это было, когда вы открыли входной файл? Почему вы не использовали эту кодировку для чтения файла (не меняя его на UTF-8) в самом Python? –
Привет, кодек «ANSI as UTF-8» - я не знаю, что это значит, и я не знаю, как установить этот кодек в функции Open() Python, знаете ли вы, что это такое? И как установить его в Python? – exxon
'UTF-8' просто отлично; нет кодека ANSI, на самом деле это просто означает «локальный диалог кодовой страницы Windows», который может быть любым из 'cp1250' и' cp1255' IIRC. –