Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以UTF-16编码方式写入excel字符串_Python_Csv_Unicode_Python 3.x - Fatal编程技术网

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范围内的代码点,这就是为什么它们首先出现错误的原因。