Python:文件编码错误

Python:文件编码错误,python,encoding,utf-8,mediawiki,wiki,Python,Encoding,Utf 8,Mediawiki,Wiki,几天以来,我一直在用Python编写的小程序中处理文件编码这一恼人的问题 我经常使用MediaWiki——最近我做了从.doc到Wikisource的文档转换 Microsoft Word格式的文档在Libre Office中打开,然后以Wikisource格式导出为.txt文件。我的程序正在搜索一个[[Image:]]标记,并用一个从列表中获取的图像名称替换它——这种机制运行得非常好(非常感谢brjaga的帮助!)。 当我对自己创建的.txt文件进行测试时,一切都很好,但当我将一个.txt文件

几天以来,我一直在用Python编写的小程序中处理文件编码这一恼人的问题

我经常使用MediaWiki——最近我做了从.doc到Wikisource的文档转换

Microsoft Word格式的文档在Libre Office中打开,然后以Wikisource格式导出为.txt文件。我的程序正在搜索一个[[Image:]]标记,并用一个从列表中获取的图像名称替换它——这种机制运行得非常好(非常感谢brjaga的帮助!)。 当我对自己创建的.txt文件进行测试时,一切都很好,但当我将一个.txt文件放入Wikisource时,整个事情就不再那么有趣了:D

我收到了这个信息:

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>
我做了一些研究,发现这是编码的问题。因此,我安装了一个程序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>
回溯(最近一次呼叫最后一次):
文件“C:\Python33\final.py”,第22行,在
目标写入
文件“C:\Python33\lib\encodings\cp1250.py”,第19行,编码
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法对位置0中的字符“\ufeff”进行编码:字符映射到
我真的被这件事难住了。我想,当我在Notepad++中手动更改编码,然后我会告诉你我设置的编码-一切都会好起来


请帮助,提前谢谢。

当Python 3打开一个文本文件时,它在尝试解码该文件时使用默认的系统编码,以便为您提供完整的Unicode文本(str类型完全支持Unicode)。当写出这样的Unicode文本值时,它也会这样做

您已经解决了输入端问题;读取时指定了编码。写入时执行同样的操作:指定一个编解码器,用于写出可处理Unicode的文件,包括代码点U+FEFF处的非中断空白字符。UTF-8通常是一个很好的默认选择:

dest = open('C:\\124_BPP_PL_PL_processed.txt', 'w', encoding='utf8')
编写时也可以使用
with
语句,并保存
.close()
调用:

for item in li:
     s = s.replace("[[Image:]]", item, 1)

with open('C:\\124_BPP_PL_PL_processed.txt', 'w', encoding='utf8') as dest:        
    dest.write(s)

当您打开输入文件时,Notepad++认为它是什么编解码器?为什么不使用这种编码来读取Python本身的文件(而不将其更改为UTF-8)?您好,编解码器是“ANSI as UTF-8”-我不知道这意味着什么,也不知道如何在Python open()函数中设置此编解码器,您知道这是什么吗?如何在Python中设置它?
UTF-8
很好;没有ANSI编解码器,实际上,它只是指“本地Windows代码页方言”,可以是
cp1250
cp1255
IIRC之间的任何内容。
for item in li:
     s = s.replace("[[Image:]]", item, 1)

with open('C:\\124_BPP_PL_PL_processed.txt', 'w', encoding='utf8') as dest:        
    dest.write(s)