Python 以UTF-16编码方式写入excel字符串
我正在以Python 以UTF-16编码方式写入excel字符串,python,csv,unicode,python-3.x,Python,Csv,Unicode,Python 3.x,我正在以编码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是文本
编码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>
UnicodeEncodeError:“charmap”编解码器无法对位置113中的字符“\xe9”进行编码:字符映射到
使用Python 3.2,您还需要为CSV文件选择输出编码:
excelFile = open("excelFile_1.csv", 'w', newline='', encoding='UTF16')
系统的默认编解码器无法处理从输入文件名读取的代码点
在Excel中打开此文件可能不起作用;请按照中的步骤选择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感到高兴(er)。我尝试了第二个选项,在常规打开Excel时效果很好,我不需要添加“\ufeff”@user1869297在文件中包含一些实际的Unicode非ASCII字符之前,它将在没有BOM的情况下工作。我知道你知道这个Martijn,但在本例中BOM的目的不是表示字节顺序,而是将文件标记为UTF-8编码,而不是Microsoft仍然喜欢的一种古老的代码页编码。@MarkRansom:是的,我知道,Microsoft必须支持太多的旧编解码器。请注意,OP在输出中确实有拉丁-1范围内的代码点,这就是为什么它们首先出现错误的原因。