在Python中的Unicode解码错误
问题描述:
TDB = csv.reader(codecs.open('data/TDS.csv', 'rb', encoding='utf-8'), delimiter=',', quotechar='"')
ts = db.testCol
for row in TDB:
print row[1]
T = {"t":row[1],
"s": row[0]}
post_id = ts.insert(T)
我不知道为什么我不能编码到utf-8,而我想插入数据到数据库中,我必须使它成为utf8格式。在Python中的Unicode解码错误
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 36: invalid continuation byte
在我把编码功能,我得到这个从pymongo。
bson.errors.InvalidStringData: strings in documents must be valid UTF-8
,我想,这是该数据可能不编码
'compleja e intelectualmente retadora , el ladrÛn de orquÌdeas es uno de esos filmes que vale la pena ver precisamente por su originalidad . '
任何人都知道我应该怎么办?由于
答
好吧,这可能帮助..
有编码列表在这里:
http://docs.python.org/2/library/codecs.html#standard-encodings
latin-1
是用于欧洲语言共同的编码。
与涉及编码的基本流程是:
- 读取在经编码的内容
- content.decode( “源编码”)为Unicode
- 从Unicode编码至希望的编码,unicode_content.encode (“所需的编码”)
您可以尝试经历,似乎正确的编码,看看哪些不会导致错误:
enc = "latin-1"
f = open("TSD.csv", "r")
content = f.read() # raw encoded content
u_content = content.decode(enc) # decodes from enc to unicode
utf8_content = u_content.encode("utf8")
+0
谢谢。昨天我也尝试了这个帮助。 row [1] .decode('latin-1')。encode('ascii','xmlcharrefreplace') – 1myb 2013-02-22 07:00:56
您试图读取(解码)为UTF8的数据,而不是编码。确保你的文件“TDS.csv”被编码为UTF8。 – monkut 2013-02-21 06:44:56
@monkut,我可以知道我该怎么办?如果我想让它们输出为utf8并保存到pymongo。谢谢 – 1myb 2013-02-21 06:50:53
你首先需要知道什么编码数据,“TDS.csv”是。另外,应该注意的是,csv模块不支持unicode(这是codecs.open()将返回的内容)。 – monkut 2013-02-21 07:09:42