我有一个解析网页的程序,然后将数据写出其他地方。当我写数据时,我得到了
" UnicodeEncodeError:' ascii'编解码器无法对字符进行编码 19-21:序数不在范围内(128)"
我正在使用lxml收集数据。
name = apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text
worksheet.goog["Name"].append(name)
阅读http://effbot.org/pyfaq/what-does-unicodeerror-ascii-decoding-encoding-error-ordinal-not-in-range-128-mean.htm后,它建议我将所有变量记录在unicode中。这意味着我需要知道网站使用的编码。
我实际将数据写到某处的最后一行是:
wks.update_cell(row + 1, worksheet.goog[value + "_col"], (str(worksheet.goog[value][row])).encode('ascii', 'ignore'))
假设编码是UTF-8,我将如何使用unicode进行合并,我希望它在出路时是ASCII?
答案 0 :(得分:1)
你的错误是因为:
str(worksheet.goog[value][row])
调用str
你正在尝试编码ascii,你应该做的是编码为utf-8:
worksheet.goog[value][row].encode("utf-8")
至于如果假设编码是UTF-8,我将如何使用unicode进行合并,我希望它在出路时是ASCII?去,你不能没有ascii latin ă
等...除非你想使用类似Unidecode的东西获得最接近的ascii等价物。
答案 1 :(得分:0)
我想我可能已经解决了我自己的问题。
apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text
实际上默认为unicode。所以我所做的就是将这一行改为:
name = (apiTree.xpath("//boardgames/boardgame/name[@primary='true']")[0].text).encode('ascii', errors='ignore')
我输出时没有改变任何东西:
wks.update_cell(row + 1, worksheet.goog[value + "_col"], worksheet.goog[value][row])
由于数据的性质,ASCII只是很好。虽然,我可以使用UTF-8并捕获一些额外的字符......但这与问题无关。
:)