使用openpyxl设置Excel UTF-8编码及解决工作表名显示异常问题
嘿,我来帮你搞定这两个openpyxl相关的问题:
问题1:如何为Excel文件设置UTF-8编码?
其实你可能有点误解——xlsx格式(也就是openpyxl专门处理的格式)本身是基于OOXML标准的,内部默认就用UTF-8编码存储文本内容,所以不需要额外给Excel文件手动设置UTF-8编码。
如果是你在读取或写入时遇到字符乱码,那大概率是终端或输出环境的编码问题,而非Excel文件本身的编码问题。比如在Python 2中,终端默认编码可能不是UTF-8,这时候你需要确保输出字符串的编码和终端匹配。举个例子,打印Unicode字符串时可以先编码成UTF-8:
print my_unicode_string.encode('utf-8')
问题2:如何让工作表名正常显示为Février?
先看你的输出[u'Janvier ', u'F\xe9vrier']——这是Python 2里的Unicode字符串表示:u前缀说明这是Unicode类型,\xe9是字符é的Unicode码点(U+00E9)的十六进制转义形式。它本质上就是正确的Février,只是Python 2默认打印Unicode字符串时会显示转义字符,而非直接展示对应的符号。
这里有两种简单的解决方法:
- 方案1:把Unicode字符串编码成UTF-8再打印,遍历工作表名的话可以这么写:
sheet_names = self.classeur.get_sheet_names() for name in sheet_names: print name.encode('utf-8') - 方案2:如果你的终端支持UTF-8编码,也可以在代码开头添加以下内容,修改Python的默认输出编码:
这样后续打印Unicode字符串时会自动转成UTF-8输出,就能直接看到import sys reload(sys) sys.setdefaultencoding('utf-8')Février了。
另外,要是能升级到Python 3会更省心——Python 3里默认字符串就是Unicode,只要终端编码是UTF-8,打印时就会直接显示正确的字符,不会出现这种转义情况。
内容的提问来源于stack exchange,提问作者Julie Levesque
相关产品推荐
相关产品推荐

