字符编码,XML,Excel,Python

我正在阅读从另一个软件程序导入到Excel的XML文件的string列表。 我不确定excel文件的编码是什么,但是我非常肯定它不是windows-1252,因为当我尝试使用这种编码时,我遇到了很多错误。

现在引起我麻烦的具体的词是:“Zmysłowska,马格达莱纳”(注意“l”不是一个标准的“l”,而是通过它的斜线)。

我已经尝试了几件事情,我在这里提到其中三个:

(1)

page = unicode(page, "utf-8") page = unicodedata.normalize("NFKD", page) page = page.encode("utf-8", "ignore") Output: Zmys\xc5\x82owska, Magdalena Output after print statement: Zmysłowska, Magdalena 

(2)

 page = unicode(page, "utf-8") page = unicodedata.normalize("NFKD", page) Output: Zmys\u0142owska, Magdalena Output after print statment: Zmysłowska, Magdalena Note: this is great, but I need to encode it back to utf-8 before putting the string into my db. When I do that, by running page.encode("utf-8", "ignore"), I end up with ZmysÅ‚owska, Magdalena again. 

(3)什么都不做(不规范化,不解码,不编码)。 看起来这个string已经是utf-8了。但是,当我什么都不做的时候,这个string又以下面的输出结束:

 Output: Zmys\xc5\x82owska, Magdalena Output after print statement: Zmysłowska, Magdalena 

有没有办法让我把这个string转换为utf-8?

你的问题不是你的编码和解码。 您的代码正确地采用UTF-8string,并将其转换为NFKD规范化的UTF-8string。 (你可能想使用page.decode("utf-8")而不是unicode(page, "utf-8") ,以防万一你去Python 3,并使代码变得更简单读取,因为encodedecode更明显是平行的,但你不必,两者是等价的。)

你的问题实际上是你打印的UTF-8string不是UTF-8。 最有可能的是打印到cmd窗口,这是Windows-1252默认的。 所以, cmd尝试将UTF-8字符解释为Windows-1252,并且被垃圾回收。

有一个非常简单的方法来testing这个。 让Python解码UTF-8string,就好像它是Windows-1252一样,看看得到的Unicodestring是否看起来像是什么。

 >>> print page.decode('windows-1252') Zmysłowska, Magdalena >>> print repr(page.decode('windows-1252')) u'Zmys\xc5\u201aowska, Magdalena' 

有两种方法:

  1. 打印Unicodestring并让Python处理它。
  2. 打印string转换为适当的编码。

对于选项1:

 print page.decode("utf-8") # of unicode(page, "utf-8") 

对于选项2,它将是以下之一:

 print page.decode("utf-8").encode("windows-1252") print page.decode("utf-8").encode(sys.getdefaultencoding()) 

当然,如果你保留中间的Unicodestring,你不需要所有的decode调用:

 upage = page.decode("utf-8") upage = unicodedata.normalize("NFKD", upage) page = upage.encode("utf-8", "ignore") print upage