这是我的代码
以下工作但写错了字符串
import csv
import codecs
if __name__ == "__main__":
# This works for writing unico but writes wrong string
with codecs.open("./why_unicode.csv", "wb" ) as csv_file:
writer = csv.writer(csv_file)
unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1'.encode('utf-8')
writer.writerow(unico)
结果如下
I,P,ä,¸,“,ç,”,¨,è,€,³,æ,œ,º,.,é,»,‘
这不是正确的字符串。正确的字符串是'IP专用耳机.黑'
这不起作用
import csv
import codecs
if __name__ == "__main__":
with codecs.open("./why_unicode.csv", "wb", 'utf-8' ) as csv_file:
writer = csv.writer(csv_file)
unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1'
writer.writerow(unico)
这是错误
SyntaxError: Non-ASCII character '\xe4' in file
test_unicode.py on line 15, but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
这根本不会运行
import csv
import codecs
if __name__ == "__main__":
with codecs.open("./why_unicode.csv", "wb") as csv_file:
writer = csv.writer(csv_file)
unico = u'IP\u4e13\u7528\u8033\u673a.\u9ed1'.encode('utf-8')
#chn = u'IP专用耳机.黑' # even commenting out will return error
writer.writerow(unico)
stackoverflow中对此类问题的标准响应是使用codecs
或encode('utf-8
),我尝试了两种但都不起作用,这有点令人困惑,有人可以帮助我吗?
编辑:
脚本使用的是python 2.7.3(来自python -V)
答案 0 :(得分:1)
您的代码中存在多个错误。
要修复SyntaxError: Non-ASCII character '\xe4' in file
,请在顶部添加编码声明:# -*- coding: utf-8 -*-
。该错误只是意味着您在源代码中的某处使用了一个文字非ascii字符(即使您在评论中这样做了)。
下一个错误是csv
使用不正确。 writerow()
接受一行 - 一系列项目。你不应该传递一个字节序列的字节串,除非你希望每列都是一个字节(你可能不会):
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import csv
text = u'IP专用耳机.黑'
with open("why_unicode.csv", "wb") as file:
writer = csv.writer(file)
for i in range(3):
writer.writerow([text.encode('utf-8'), i])
注意:您不需要codecs
来写入字节。
要避免手动编码每个Unicode字符串,请参阅UnicodeWriter
example in csv docs。