いくつかの追加フィールドを挿入して、移植可能なバージョンのデータ ディクショナリを生成する必要があるタスクがあります。最終的に、やや大きな Python 辞書を作成し、それを JSON に変換したいと考えました。しかし、この変換を試みると...
with open('CPS14_data_dict.json','w') as f:
json.dump(data_dict,f,indent=4,encoding='utf-8')
私は例外で叩かれます:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 17: invalid start byte
これがよくある間違いであることはわかっていますが、私の人生では、辞書で問題のある部分を見つける方法の例を見つけることはできません. 私が見た唯一のもっともらしいことは、辞書を文字列に変換し、ord()
各文字で実行することです:
for i,c in enumerate(str(data_dict)):
if ord(c)>128:
print i,'|',c
問題は、この操作が何も返さないことです。仕組みについて何か不足していますord()
か?または、位置 (17) が報告されますが、これが何を指しているのかは明確ではありません。17番目の文字、行、またはエントリに問題はないようです。
ensure_ascii=False
私はそのオプションについて知っていると言わなければなりません。確かに、それはディスクに書き込みます (そしてそれは美しいです)。ただし、このアプローチは、缶を先に進めるだけのようです。ファイルを再度読み込もうとすると、同じエンコーディング エラーが発生します。このファイルを複数の目的で使用する (辞書に変換する) ため、これは問題です。
また、これは Windows 7 を搭載した私の仕事用コンピューターであるため、ファイルを探索するためのシェル ツールを持っていません (そして、私の VM はフリッツにあります)。
どんな助けでも大歓迎です。