Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.4中文本编码的混乱:如何防止;UnicodeEncodeError:&x27;charmap';编解码器可以';“t编码”;_Python_Encoding_Utf 8_Cp1252 - Fatal编程技术网

Python 3.4中文本编码的混乱:如何防止;UnicodeEncodeError:&x27;charmap';编解码器可以';“t编码”;

Python 3.4中文本编码的混乱:如何防止;UnicodeEncodeError:&x27;charmap';编解码器可以';“t编码”;,python,encoding,utf-8,cp1252,Python,Encoding,Utf 8,Cp1252,再一次,处理字符编码的问题开始困扰着我。 我正在打开一个包含XML的文本文件并将其导入到 import xml.etree.ElementTree as ET import codecs f = open('Acta_Diabetol_2008_Jun_29_45(2)_107-127.nxml','r',encoding='cp1252') myTree = ET.parse( f ) f.close() of = open( 'Acta_Diabetol_2008_Jun_29_45(2

再一次,处理字符编码的问题开始困扰着我。 我正在打开一个包含XML的文本文件并将其导入到

import xml.etree.ElementTree as ET
import codecs

f = open('Acta_Diabetol_2008_Jun_29_45(2)_107-127.nxml','r',encoding='cp1252')
myTree = ET.parse( f )
f.close()

of = open( 'Acta_Diabetol_2008_Jun_29_45(2)_107-127.txt','w')      
for elem in myTree.iter('sec'):
    of.write( elem2StringRecurse( elem ) )  #gets mad here
of.close()
给出的错误是

line 197, in <module>
of.write( elem2StringRecurse( elem ) )
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2265' 
in position 139: character maps to <undefined>
第197行,在
of.write(elem2StringRecurse(elem))
文件“C:\Python34\lib\encodings\cp1252.py”,第19行,在encode中
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法对字符“\u2265”进行编码
在位置139:角色映射到
我的问题有两方面。首先,尽管是一位经验丰富的程序员,但研究这一点比通常情况下更混乱,因为在Python2和Python3中处理方式不同。 因此,我不确定这个错误意味着什么。 我知道一些意大利“a”字的人是罪魁祸首是不是告诉我没有Unicode替换

第二,在一般情况下如何防止这种情况?我正在尝试编写代码,以便为自然语言处理抽取和转储文本文件:从XML-->纯文本。我不能让它因为这样的事情而崩溃;我的意思是,我相信我可以手动编辑掉冒犯的角色,但我不能编辑1000次…

使用

f = open('Acta_Diabetol_2008_Jun_29_45(2)_107-127.nxml', 'r', encoding='utf-8')

用UTF-8以外的任何方式编码XML都会带来麻烦


查看您的文件(链接在注释中),很明显它是用ASCII编码的,ASCII是UTF-8的子集(也是cp1252的子集,这可能是Firefox和jEdit猜测它使用这种编码的原因)。除了ElementTree似乎正在解析为Unicode码点的
0xff
之外,它还包含几个Unicode转义。如果您试图将其保存回cp1252编码的文件,您遇到的错误就是结果。

谢谢您的回答。我使用的是“cp1252”编解码器,因为文件是在该编解码器中编码的。(由杰迪特和火狐确认)。这样做不对吗?另外-->它现在可以工作了,谢谢。它在XML文件本身中是否说
encoding='cp1252'
?这是可能的,但这种编码不知道“欧洲”语言中使用的几个字符。你能把这个文件贴到某个地方或者给我们一个链接吗?她在这里:好的,这个文件看起来是ASCII编码的,但是它包含很多编码字符,比如
,不包括在ASCII或cp1252中。ElementTree似乎正在将这些解析为Unicode代码点-导致文件在cp1252编码中写入失败。因此,尝试现在打开它并使用
utf-8
保存。将其更改为f=open('Acta\u Diabetol\u 2008\u Jun\u 29\u 45(2)\u 107-127.nxml','r',encoding='utf-8')修复了它,并且没有任何瑕疵。谜团就这样解开了。
of = open('Acta_Diabetol_2008_Jun_29_45(2)_107-127.txt', 'w', encoding='utf-8')