import csv
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
test_jp = u'\u30a2\u30af\u30bb\u30b5\u30ea\u30fc'
print(test_jp)
print(type(test_jp))
print(repr(test_jp))
print('-------------------')
print(test_jp.encode('utf-8'))
print(test_jp.encode('cp932'))
'''
print(test_jp.decode('utf-8'))
spamwriter.writerow(test_jp)
Causeing ERROR
UnicodeEncodeError: 'ascii' codec can't encode characters
in position 0-5: ordinal not in range(128)
'''我已经尝试过spamwriter.writerow(test_jp.encode('utf-8'))。
但是输出结果是乱码->‘ã,ã,’ã,»ã,µãƒªããƒ?‘。
我希望输出的csv内容是'アクセサリー‘。
我该怎么办?(spamwriter.writerow(test_jp)不工作)
发布于 2015-02-10 18:05:06
你需要将它包装在一个list中,然后test_jp.encode("utf-8")就可以工作了,writerow需要一个迭代器,所以它会迭代写入每个字节的字符串:
spamwriter.writerow([test_jp.encode("utf-8")])你可以看到,当我们迭代它的时候,我们也得到了奇怪的输出:
In [6]: for ch in test_jp.encode("utf-8"):
print ch
...:
�
�
�
�
�
�
�
�
�
�
�
�
In [7]: print test_jp.encode("utf-8")
アクセサリー经过测试并正常工作:
$ cat eggs.csv
Spam |Lovely Spam| |Wonderful Spam|
アクセサリーhttps://stackoverflow.com/questions/28428429
复制相似问题