我试图从名为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)
答案 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上的默认编码(至少它已经老去了)。
但不要依赖它。
您是否尝试过编解码器模块?