我正在阅读来自许多不同国家的unicode字符的文本文件。该文件中的数据也是JSON格式。UnicodeDecodeError:'ascii'编解码器无法解码字节... Python 2.7和
我正在使用CentOS机器。当我在终端中打开文件时,unicode字符显示得很好(所以我的终端配置为unicode)。
当我在Eclipse中测试我的代码时,它工作正常。当我跑我的在终端的代码,它抛出一个错误: 的UnicodeDecodeError:“ASCII”编解码器不能在17位解码字节0xc3:有序不在范围内(128)
for line in open("data-01083"):
try:
tmp = line
if tmp == "":
break
theData = json.loads(tmp[41:])
for loc in theData["locList"]:
outLine = tmp[:40]
outLine = outLine + delim + theData["names"][0]["name"]
outLine = outLine + delim + str(theData.get("Flagvalue"))
outLine = outLine + delim + str(loc.get("myType"))
flatAdd = ""
srcAddr = loc.get("Address")
if srcAddr != None:
flatAdd = delim + str(srcAddr.get("houseNumber"))
flatAdd = flatAdd + delim + str(srcAddr.get("streetName"))
flatAdd = flatAdd + delim + str(srcAddr.get("postalCode"))
flatAdd = flatAdd + delim + str(srcAddr.get("CountryCode"))
else:
flatAdd = delim + "None" + delim + "None" + delim +"None" + delim +"None" + delim +"None"
outLine = outLine + FlatAdd
sys.stdout.write(("%s\n" % (outLine)).encode('utf-8'))
except:
sys.stdout.write("Error Processing record\n")
所以一切工作,直到它到达StreetName,它在UnicodeDecodeError中崩溃,这是非ASCII字符开始显示的位置。
我可以通过添加.encode修复实例( 'UTF-8'):
flatAdd = flatAdd + delim + str(srcAddr.get("streetName").encode('utf-8'))
但然后将其与UnicodeDecodeError错误下一行崩溃:
outLine = outLine + FlatAdd
我已经在这一类问题上徘徊了一个月。任何反馈将不胜感激!
[如何阻止疼痛?](http://nedbatchelder.com/text/unipain.html) – 2013-03-26 20:25:08
Robᵩ,谢谢!看到字节后我感觉像Neo。 – user1826936 2013-03-28 14:29:44