' \ xe4'的Unicode错误用于将外来字符写入csv

时间:2015-07-02 22:44:15

标签: python csv unicode utf-8

这是我的代码

以下工作但写错了字符串

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中对此类问题的标准响应是使用codecsencode('utf-8),我尝试了两种但都不起作用,这有点令人困惑,有人可以帮助我吗?

编辑:

脚本使用的是python 2.7.3(来自python -V)

1 个答案:

答案 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