在编码UTF-16时写入excel字符串

时间:2013-08-14 21:31:25

标签: python csv unicode python-3.x

我正在以encoding UTF-16模式打开文本文件:

with open(file.txt, 'r', encoding="UTF-16") as infile:

然后我想写一个excel文件:

from csv import writer
excelFile = open("excelFile_1.csv", 'w', newline='') 
write = writer(excelFile, delimiter=',')
write.writerows([[input]])

其中input是文本文件file.txt

中的术语

我收到以下错误

UnicodeEncodeError: 'charmap' codec can't encode character '\xe9' in position 113: character maps to <undefined>

使用Python 3.2

1 个答案:

答案 0 :(得分:3)

您还需要为CSV文件选择输出编码:

excelFile = open("excelFile_1.csv", 'w', newline='', encoding='UTF16') 

系统的默认编解码器无法处理您从输入文件名中读取的代码点。

在Excel 中打开此文件可能不起作用;请按照this answer中的步骤选择UTF16编解码器,以确保Excel正确读取文件。

您也可以尝试使用UTF-8,将UTF-8 BOM添加到文件的开头:

excelFile = open("excelFile_1.csv", 'w', newline='', encoding='UTF8')
excelFile.write('\ufeff')  # Zero-width non-breaking space, the Byte Order Mark

主要是Microsoft软件使用UTF-8文件中的BOM,因为UTF-8只有一个字节顺序可供选择,与UTF-16和UTF-32不同,但它显然让Excel开心(呃)。