UnicodeEncodeError:' ascii'编解码器不能对位置0-10中的字符进行编码:序数不在范围(128)中文字符中

时间:2015-07-21 22:04:00

标签: python unicode encoding utf-8 character-encoding

我试图从名为result的SQL输出中将中文字符写入文本文件。 result看起来像这样:  [('你好吗', 345re4, '2015-07-20'), ('我很好',45dde2, '2015-07-20').....]

这是我的代码:

#result is a list of tuples
    file = open("my.txt", "w")
    for row in result:
        print >> file, row[0].encode('utf-8')
    file.close()

row[0]包含如下中文文字:你好吗

我也尝试过:

print >> file, str(row[0]).encode('utf-8')

print >> file, 'u'+str(row[0]).encode('utf-8')

但两者都给出了同样的错误。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)

2 个答案:

答案 0 :(得分:3)

通过使用编解码器从一开始就将文件格式化为“utf-8”,找到了一个简单的解决方案,而不是进行编码和解码。

import codecs
file = codecs.open("my.txt", "w", "utf-8")

答案 1 :(得分:-1)

如果您希望在文本编辑器中正确查看文件,请不要忘记在文件开头添加UTF8 BOM:

file = open(...)
file.write("\xef\xbb\xbf")
for row in result:
    print >> file, u""+row[0].decode("mbcs").encode("utf-8")
file.close()

我认为您必须从机器默认编码解码为unicode(),然后将其编码为UTF-8。

mbcs表示Windows上的默认编码(至少它已经老去了)。

但不要依赖它。

您是否尝试过编解码器模块?