Python 将俄语符号写入csv时出现Unicode错误

Python 将俄语符号写入csv时出现Unicode错误,python,python-3.x,csv,unicode,Python,Python 3.x,Csv,Unicode,我想将西里尔字母符号写入csv文件,但出现unicode编码错误。英语符号完美无瑕。我正在使用Python 3.6.2 UnicodeEncodeError:“ascii”编解码器无法对位置中的字符进行编码 1-6:序号不在范围128中 在将hello字符串写入csv文件之前,只需对其进行编码。否则Python希望您只输入ascii字符,如果是非ascii字符,您可以使用utf-8编码,如下所示: # -*- coding: utf-8 -*- import csv with open("t

我想将西里尔字母符号写入csv文件,但出现unicode编码错误。英语符号完美无瑕。我正在使用Python 3.6.2

UnicodeEncodeError:“ascii”编解码器无法对位置中的字符进行编码 1-6:序号不在范围128中


在将hello字符串写入csv文件之前,只需对其进行编码。否则Python希望您只输入ascii字符,如果是非ascii字符,您可以使用utf-8编码,如下所示:

# -*- coding: utf-8 -*-
import csv


with open("test.csv", 'w') as csvfile:
    csvfile = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    hello = u'привет, мир!' # Better way of declaring a unicode string literal
    csvfile.writerow([hello.encode("utf-8")])

在将hello字符串写入csv文件之前,只需对其进行编码。否则Python希望您只输入ascii字符,如果是非ascii字符,您可以使用utf-8编码,如下所示:

# -*- coding: utf-8 -*-
import csv


with open("test.csv", 'w') as csvfile:
    csvfile = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    hello = u'привет, мир!' # Better way of declaring a unicode string literal
    csvfile.writerow([hello.encode("utf-8")])

打开文件时声明文件的编码。换行符=也是文档要求的

import csv

with open('test.csv','w',encoding='utf8',newline='') as csvfile:
    csvfile = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    hello = 'привет, мир!'
    csvfile.writerow([hello])

打开文件时声明文件的编码。换行符=也是文档要求的

import csv

with open('test.csv','w',encoding='utf8',newline='') as csvfile:
    csvfile = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    hello = 'привет, мир!'
    csvfile.writerow([hello])

将此代码添加到您的文件中

   # encoding=utf8  
   --------------------------------------
   import sys  
   reload(sys)  
   sys.setdefaultencoding('utf8')  

将此代码添加到您的文件中

   # encoding=utf8  
   --------------------------------------
   import sys  
   reload(sys)  
   sys.setdefaultencoding('utf8')  

对于Python 2,请使用此函数而不是普通的open函数:

import codecs
codecs.open(out_path, encoding='utf-8', mode='w')
这相当于Python 3中的以下内容:

open(out_path, 'w', encoding='utf8')

对于Python 2,请使用此函数而不是普通的open函数:

import codecs
codecs.open(out_path, encoding='utf-8', mode='w')
这相当于Python 3中的以下内容:

open(out_path, 'w', encoding='utf8')


我得到了| b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82\xd0\xbc\xd0\xb8\xd1\x80!'在我的csv中file@DamirShakenov尝试使用其他一些文本查看器,例如在VS Code、Atom、Excel 2016中使用的sublime.trusted-同样的结果可能是您的系统/编辑器设置为UTF-8以外的某些代码页。一些编辑器提供了更改所显示文件的代码页的可能性。这会给你一些结果吗?你复制粘贴了相同的代码吗?我在Python2.7和sublime编辑器上尝试了这段代码,效果很好。我得到了| b'\xd0\xbf\xd1\x80\xb8\xd0\xb2\xd0\xb5\xd1\x82\xd0\xbc\xd0\xb8\xd1\x80!'在我的csv中file@DamirShakenov尝试使用其他一些文本查看器,例如在VS Code、Atom、Excel 2016中使用的sublime.trusted-同样的结果可能是您的系统/编辑器设置为UTF-8以外的某些代码页。一些编辑器提供了更改所显示文件的代码页的可能性。这会给你一些结果吗?你复制粘贴了相同的代码吗?我在Python 2.7和sublime editor上尝试了这段代码,效果很好。看起来您正在使用python2运行脚本,在py3中,unicode是默认的字符串表示形式,这意味着您应该可以将数据写入csv文件。@TarasMatsyk my PyCharm是为Python 3.6.2解释器配置的。看起来您正在使用python2运行脚本,在py3中,unicode是一种默认的字符串表示形式,这意味着您可以将数据写入csv文件。@TarasMatsyk my PyCharm是为python 3.6.2解释器配置的。您能解释一下这段代码是如何解决这个问题的吗?它并没有解决任何问题,因为问题被标记为python-3.x,并且python 3的默认编码已经存在UTF-8。在Python2上,此技巧用于更改ascii的默认编码,并中断依赖默认编码的其他模块。这总是一个错误的建议。好吧,问题被标记为Python3,但是这个解决方案实际上解决了Python2.7的问题!谢谢你,伙计!你能解释一下这段代码到底是如何解决这个问题的吗?它没有解决任何问题,因为这个问题被标记为python-3.x,而python 3的默认编码已经是UTF-8了。在Python2上,此技巧用于更改ascii的默认编码,并中断依赖默认编码的其他模块。这总是一个错误的建议。好吧,问题被标记为Python3,但是这个解决方案实际上解决了Python2.7的问题!谢谢你,伙计!