用 pyExcelerate 写特殊字符?如何保持utf-8编码?

Writing special chäracters with pyExcelerate? How to keep utf-8 encoding?

我想将数据从 Pandas 数据帧写入 Excel 文件。我使用 pyExcelerate 而不是内置的 to_excel() 方法来获得更好的性能。

虽然 Pandas 处理 utf-8 编码的特殊字符,但在转换为 python 列表时编码似乎丢失了。 我通读了 https://docs.python.org/2/howto/unicode.html,但是我找不到如何保留编码。或者有什么方法可以在撰写本文时恢复编码?

# -*- coding: utf-8 -*-
import pandas as pd
from pyexcelerate import Workbook 

df = pd.DataFrame({'val': ['ä']})
print df
#   val
# 0   ä  <- non ascii character a with dots

value = df.values.tolist()
print value
# [['\xc3\xa4']]

wb = Workbook()
ws = wb.new_sheet("sheet name", data=value)
wb.save("output.xlsx")

# UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 31: ordinal not in range(128)

很简单,通过使用 Unicode 文字为您的 Dataframe 提供 Unicode:

df = pd.DataFrame({u'val': [u'ä']})

注意 u 前缀

确保您的文件使用 UTF-8 编码(以匹配 # -*- coding: utf-8 -*- header)(它看起来确实是 UTF-8 编码,因为 0xc3 是 [= 的第一个字节14=])

错误是由于 Python 不知道字节字符串的编码,稍后将字符串编组为 Unicode object。