Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 使用io.String创建与Excel兼容的utf8 CSV_Python_Python 3.x_Csv - Fatal编程技术网

Python 使用io.String创建与Excel兼容的utf8 CSV

Python 使用io.String创建与Excel兼容的utf8 CSV,python,python-3.x,csv,Python,Python 3.x,Csv,我想创建一个通过邮件发送的CSV字符串。我希望避免使用临时文件,因为我不需要处理文件系统。正如我所说,数据被传递到一个邮件类 我找到了这个巧妙的解决办法 output = io.StringIO() writer = csv.writer(output, delimiter=';', dialect='excel-tab') writer.writerows(data) 它工作得很好,只是它创建了一个UTF-8文件,如果在Excel中打开它,它会弄乱特殊字符 我试图将BOM表传递给String

我想创建一个通过邮件发送的CSV字符串。我希望避免使用临时文件,因为我不需要处理文件系统。正如我所说,数据被传递到一个邮件类

我找到了这个巧妙的解决办法

output = io.StringIO()
writer = csv.writer(output, delimiter=';', dialect='excel-tab')
writer.writerows(data)
它工作得很好,只是它创建了一个UTF-8文件,如果在Excel中打开它,它会弄乱特殊字符

我试图将BOM表传递给
StringIO
构造函数,但没有任何效果:

output = io.StringIO('\ufeff')
我试图以某种方式将编码设置为
utf-8-sig
,但除了使用文件外,我找不到其他方法

有没有办法解决这个问题


谢谢

StringIO是表示unicode的字符串。要想做你想做的事,我想你需要用BytesIO来代替

阅读之后,我认为问题在于StringIO只是字符串,因此没有编码

你可以试试这个[从上面的第一个链接推断]:

bio = io.BytesIO()
StreamWriter = codecs.getwriter('utf-8-sig')
wrapper_file = StreamWriter(bio)
csv.writer(wrapper_file,...
writer.writerows(data)
Python字符编码让我头疼