【问题标题】:How to have UTF-8 enconding with an Excel file with openpyxl如何使用 openpyxl 对 Excel 文件进行 UTF-8 编码
【发布时间】:2018-06-23 00:51:36
【问题描述】:

使用 Python 和 Openpyxl,当我尝试读取工作表名称时,我得到了这个结果:

[u'Janvier', u'F\xe9vrier'

代码是:

self.classeur = openpyxl.load_workbook('/users/utilisateur/Desktop/Historique.xlsx')
print self.classeur.get_sheet_names()

我该怎么做才能有 Février ?

【问题讨论】:

  • u'F\xe9vrier' 没有问题:这是 Python 2 的 repr 格式,它总是返回带有转义序列的 ASCII。 u'Février'u'F\xe9vrier' 是同一个字符串,只是显示方式不同。
  • 我尝试使用 repr() 但它的输出相同。如何在 u'Février' 中转换我的字符串?
  • 你永远不会看到u'Février'。在 Python 3 上,repr() 将返回 'Février',因此请考虑升级(实际上有更多原因)。无论如何,也许这会产生你想要的:print ', '.join(self.classeur.get_sheet_names())

标签: python excel utf-8 openpyxl


【解决方案1】:

在 OOXML 中,所有字符串都是 unicode。这些在命令行中的显示方式取决于很多事情,但主要取决于计算机的配置。由于字符串是 unicode,因此您需要将其转换为本地编码,假设这可以显示非 ascii 字符。

试试:

print(s.encode("utf8"))

请注意,这只影响您看到的内容。如果您想处理内容或编辑文件,只需将内容保存为 unicode。

【讨论】:

  • 如果默认编码设置正确且足够s 中的字符,那么print s 就足够了,因为Python 在打印时会自动对Unicode 字符串进行编码。然而,在 OP 的情况下,正在打印一个列表,该列表在每个元素上调用 repr()。而 Python 2 中的 repr() 对于所有内置类型都是全 ASCII 码,因此无论是否使用 encode(),您都不会看到任何重音字符。
  • 关键问题是“如果”。在许多系统上的 Python 2 中 print 仍然会导致引发 UnicodeDecodeError
  • 当然,这不会因为使用 Python 3 而改变(因为如果环境使用或传达的编解码器/语言环境不足,Python 将无能为力)。
猜你喜欢
  • 2010-11-15
  • 2017-09-04
  • 2015-10-26
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2013-01-31
相关资源
最近更新 更多