さまざまな国の 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
私は 1 か月間、この種の問題に悩まされてきました。どんなフィードバックでも大歓迎です!!