此代码应该将一些文本写入文件。 当我试图将我的文本写入控制台时,一切正常。但是当我尝试将文本写入文件时,我得到了UnicodeEncodeError。我知道,这是一个常见的问题,可以通过正确的解码或编码来解决,但我尝试了它仍然得到相同的UnicodeEncodeError。我做错了什么?
我附上了一个例子。
print "(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)".decode("utf-8")%(dict.get('name'),dict.get('description'),dict.get('ico'),dict.get('city'),dict.get('ulCislo'),dict.get('psc'),dict.get('weby'),dict.get('telefony'),dict.get('mobily'),dict.get('faxy'),dict.get('emaily'),dict.get('dic'),dict.get('ic_dph'),dict.get('kategorie')[0],dict.get('kategorie')[1],dict.get('kategorie')[2])
(StarBuy s.r.o.,Inzertujte s foto,auto-moto,oblečenie,reality,prácu,zvieratá,starožitnosti,dovolenky,nábytok,všetkopredeti,obuv,stroj ....
with open("test.txt","wb") as f:
f.write("(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)".decode("utf-8")%(dict.get('name'),dict.get('description'),dict.get('ico'),dict.get('city'),dict.get('ulCislo'),dict.get('psc'),dict.get('weby'),dict.get('telefony'),dict.get('mobily'),dict.get('faxy'),dict.get('emaily'),dict.get('dic'),dict.get('ic_dph'),dict.get('kategorie')[0],dict.get('kategorie')[1],dict.get('kategorie')[2]))
UnicodeEncodeError:'ascii'编解码器无法对位置50中的字符u'\ u010d'进行编码:序数不在范围内(128)
哪里可能是问题?
答案 0 :(得分:3)
要将Unicode文本写入文件,您可以使用io.open()
function:
#!/usr/bin/env python
from io import open
with open('utf8.txt', 'w', encoding='utf-8') as file:
file.write(u'\u010d')
这是Python 3的默认设置。
注意:如果要编写文本,则不应使用二进制文件模式('b'
)。
# coding: utf8
与它无关。
如果您在sys.setdefaultencoding()
之外看到site.py
或Python测试;假设代码已损坏。
答案 1 :(得分:1)
@ ned-batchelder是对的。您必须声明系统默认编码为“utf-8”。编码评论# -*- coding: utf-8 -*-
不会这样做。
要声明系统默认编码,您必须导入模块sys
,然后调用sys.setdefaultencoding('utf-8')
。但是,系统先前导入了sys
,并删除了其setdefaultencoding
方法。所以你必须在调用方法之前重新加载它。
因此,您需要在开头添加以下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
答案 2 :(得分:0)
您可能需要显式声明python使用UTF-8编码。
这个SO问题的答案解释了如何做到这一点:Declaring Encoding in Python
答案 3 :(得分:0)
对于Python 2:
在文件顶部声明文档编码(如果尚未完成):
# -*- coding: utf-8 -*-
将.decode
替换为.encode
:
with open("test.txt","wb") as f:
f.write("(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)".encode("utf-8")%(dict.get('name'),dict.get('description'),dict.get('ico'),dict.get('city'),dict.get('ulCislo'),dict.get('psc'),dict.get('weby'),dict.get('telefony'),dict.get('mobily'),dict.get('faxy'),dict.get('emaily'),dict.get('dic'),dict.get('ic_dph'),dict.get('kategorie')[0],dict.get('kategorie')[1],dict.get('kategorie')[2]))