在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 . ' 

任何人都知道我应该怎么办?由于

+0

您试图读取(解码)为UTF8的数据,而不是编码。确保你的文件“TDS.csv”被编码为UTF8。 – monkut 2013-02-21 06:44:56

+0

@monkut,我可以知道我该怎么办?如果我想让它们输出为utf8并保存到pymongo。谢谢 – 1myb 2013-02-21 06:50:53

+0

你首先需要知道什么编码数据,“TDS.csv”是。另外,应该注意的是,csv模块不支持unicode(这是codecs.open()将返回的内容)。 – monkut 2013-02-21 07:09:42

好吧,这可能帮助..

有编码列表在这里:

http://docs.python.org/2/library/codecs.html#standard-encodings

latin-1是用于欧洲语言共同的编码。

与涉及编码的基本流程是:

  1. 读取在经编码的内容
  2. content.decode( “源编码”)为Unicode
  3. 从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