字符编码、XML、Excel、python

2024-05-12 19:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读从另一个软件程序导入到excelxml文件中的字符串列表。我不确定excel文件的编码是什么,但我很确定它不是windows-1252,因为当我尝试使用这种编码时,我会遇到很多错误。在

现在给我带来麻烦的一个词是:“Zmysłowska,Magdalena”(注意“l”不是标准的“l”,而是有一个斜杠贯穿其中)。在

我试过几件事,在这里我要提到三件事:

(一)

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

(二)

^{pr2}$

(三) 什么都不做(不规范化,不解码,不编码)。当它进来的时候,它似乎已经是utf-8了。但是,当我什么也不做时,字符串最后会再次输出以下输出:

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

有没有办法把这个字符串转换成utf-8?在


Tags: 文件字符串编码outputpageutfstatementprint
1条回答
网友
1楼 · 发布于 2024-05-12 19:28:19

你的问题不在于你的编码和解码。代码正确地接受UTF-8字符串,并将其转换为NFKD规范化的UTF-8字符串。(您可能希望使用page.decode("utf-8")而不是{},以防将来使用python3,并使代码更易于阅读,因为encode和{}显然是并行的,但您不必这样做;两者是等效的。)

实际上,您的问题是将UTF-8字符串打印到不是UTF-8的上下文中。很可能您正在打印到cmd窗口,默认为Windows-1252。因此,cmd试图将UTF-8字符解释为Windows-1252,并得到垃圾。在

有一个非常简单的方法来测试这个。让Python将UTF-8字符串解码为Windows-1252,然后查看生成的Unicode字符串是否与所看到的一样。在

>>> print page.decode('windows-1252')
Zmysłowska, Magdalena

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

有两种解决方法:

  1. 打印Unicode字符串并让Python处理它。在
  2. 打印转换为适当编码的字符串。在

对于方案1:

^{pr2}$

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

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

当然,如果保留中间Unicode字符串,就不需要所有这些decode调用:

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

print upage

相关问题 更多 >