我正在阅读一个包含来自许多不同国家/地区的 unicode 字符的文本文件。文件中的数据也是 JSON 格式。
我正在使用 CentOS 机器。当我在终端中打开文件时,unicode 字符显示得很好(所以我的终端配置为 unicode)。
当我在 Eclipse 中测试我的代码时,它工作正常。当我在终端中运行我的代码时,它会抛出一个错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 17: ordinal not in range(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
一个月来,我一直在纠结这些类型的问题。任何反馈将不胜感激!!