bir*_*n04 7 python encoding json character-encoding
我想将字典转储到文件,就像将 Python 字典转储到 JSON 文件中一样。但我遇到了编码问题:\n当我简单地这样做时
\n\nprint(data) \nRun Code Online (Sandbox Code Playgroud)\n\n我在终端中得到类似的信息:
\n\n{\'legend\': \'\\n\\r\\n\\t\\t\xd0\x9d\xd0\xb0 \xd0\xbf\xd1\x80\xd1\x8f\xd0\xbc\xd0\xbe\xd0\xb9 \xd1\x80\xd0\xb0\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd1\x8b \xd1\x81\xd1\x82\xd0\xbe\xd0\xb9\xd0\xbb\xd0\xb0, \xd0\xb2 \xd0\xba\xd0\xbe\xd1\x82\xd0\xbe\xd1\x80\xd1\x8b\xd0\xb5 \xd0\xbd\xd0\xb5\xd0\xbe\xd0\xb1\xd1\x85\xd0\xbe\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xbe \xd1\x80\xd0\xb0\xd1\x81\xd1\x81\xd1\x82\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c \xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb2 \xd1\x82\xd0\xb0\xd0\xba, \xd1\x87\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xbc\xd0\xb8\xd0\xbd\xd0\xb8\xd0\xbc\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd0\xb5 \xd1\x80\xd0\xb0\xd1\x81c\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbc\xd0\xb5\xd0\xb6\xd0\xb4\xd1\x83 \xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbc\xd0\xb8 \xd0\xb1\xd1\x8b\xd0\xbb\xd0\xbe \xd0\xba\xd0\xb0\xd0\xba \xd0\xbc\xd0\xbe\xd0\xb6\xd0\xbd\xd0\xbe \xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5.\\r\\n \\n\', \'input_specification\': \'\\n\\r\\n \xd0\x92\xd1\x85\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5\\r\\n \\n\\r\\n\\t\\t\xd0\x92 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb2\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb5 \xd0\xb2\xd0\xb2\xd0\xbe\xd0\xb4\xd1\x8f\xd1\x82\xd1\x81\xd1\x8f \xd1\x87\xd0\xb8\xd1\x81\xd0\xbb\xd0\xb0 N\\xa0 (2 < N < 10001) \xe2\x80\x93 \xd0\xba\xd0\xbe\xd0\xbb\xd0\xb8\xd1\x87\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd0\xbe \xd1\x81\xd1\x82\xd0\xbe\xd0\xb9\xd0\xbb \xd0\xb8 K\\xa0 (1 < K < N ) \xe2\x80\x93 \xd0\xba\xd0\xbe\xd0\xbb\xd0\xb8\xd1\x87\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd0\xbe \xd0\xba\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb2. \xd0\x92\xd0\xbe \xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb5\\xa0\xd0\xb7\xd0\xb0\xd0\xb4\xd0\xb0\xd1\x8e\xd1\x82\xd1\x81\xd1\x8f N \xd0\xbd\xd0\xb0\xd1\x82\xd1\x83\xd1\x80\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd1\x85 \xd1\x87\xd0\xb8\xd1\x81\xd0\xb5\xd0\xbb \xd0\xb2 \xd0\xbf\xd0\xbe\xd1\x80\xd1\x8f\xd0\xb4\xd0\xba\xd0\xb5 \xd0\xb2\xd0\xbe\xd0\xb7\xd1\x80\xd0\xb0\xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f \xe2\x80\x93 \xd0\xba\xd0\xbe\xd0\xbe\xd1\x80\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xb0\xd1\x82\xd1\x8b \xd1\x81\xd1\x82\xd0\xbe\xd0\xb9\xd0\xbb (\xd0\xba\xd0\xbe\xd0\xbe\xd1\x80\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xb0\xd1\x82\xd1\x8b \xd0\xbd\xd0\xb5 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb2\xd0\xbe\xd1\x81\xd1\x85\xd0\xbe\xd0\xb4\xd1\x8f\xd1\x82 109)\\r\\n \\n\', \'output_specification\': \'\\n\\r\\n \xd0\x92\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5\\r\\n \\n\\r\\n\\t\\t\xd0\x92\xd1\x8b\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe \xd1\x87\xd0\xb8\xd1\x81\xd0\xbb\xd0\xbe \xe2\x80\x93 \xd0\xbd\xd0\xb0\xd0\xb8\xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5\xd0\xb5 \xd0\xb2\xd0\xbe\xd0\xb7\xd0\xbc\xd0\xbe\xd0\xb6\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xb4\xd0\xbe\xd0\xbf\xd1\x83\xd1\x81\xd1\x82\xd0\xb8\xd0\xbc\xd0\xbe\xd0\xb5 \xd1\x80\xd0\xb0\xd1\x81\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5.\\r\\n \\n\'}\nRun Code Online (Sandbox Code Playgroud)\n\n所以它是正常的、人类可读的文本。但是当我以这种方式将相同的字典转储到某个 json 文件时:
\n\nwith open(\'Data\\{0}.json\'.format(i), \'w\') as file:\n json.dump(data, file) \nRun Code Online (Sandbox Code Playgroud)\n\n文件中有一些奇怪的特殊字符:
\n\n{"legend": "\\n\\r\\n\\t\\t\\u041d\\u0430 \\u043f\\u0440\\u044f\\u043c\\u043e\\u0439 \\u0440\\u0430\\u0441\\u043f\\u043e\\u043b\\u043e\\u0436\\u0435\\u043d\\u044b \\u0441\\u0442\\u043e\\u0439\\u043b\\u0430, \\u0432 \\u043a\\u043e\\u0442\\u043e\\u0440\\u044b\\u0435 \\u043d\\u0435\\u043e\\u0431\\u0445\\u043e\\u0434\\u0438\\u043c\\u043e \\u0440\\u0430\\u0441\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043a\\u043e\\u0440\\u043e\\u0432 \\u0442\\u0430\\u043a, \\u0447\\u0442\\u043e\\u0431\\u044b \\u043c\\u0438\\u043d\\u0438\\u043c\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0440\\u0430\\u0441c\\u0442\\u043e\\u044f\\u043d\\u0438\\u0435 \\u043c\\u0435\\u0436\\u0434\\u0443 \\u043a\\u043e\\u0440\\u043e\\u0432\\u0430\\u043c\\u0438 \\u0431\\u044b\\u043b\\u043e \\u043a\\u0430\\u043a \\u043c\\u043e\\u0436\\u043d\\u043e \\u0431\\u043e\\u043b\\u044c\\u0448\\u0435.\\r\\n \\n", "input_specification": "\\n\\r\\n \\u0412\\u0445\\u043e\\u0434\\u043d\\u044b\\u0435 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0435\\r\\n \\n\\r\\n\\t\\t\\u0412 \\u043f\\u0435\\u0440\\u0432\\u043e\\u0439 \\u0441\\u0442\\u0440\\u043e\\u043a\\u0435 \\u0432\\u0432\\u043e\\u0434\\u044f\\u0442\\u0441\\u044f \\u0447\\u0438\\u0441\\u043b\\u0430 N\\u00a0 (2 < N < 10001) \\u2013 \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u0441\\u0442\\u043e\\u0439\\u043b \\u0438 K\\u00a0 (1 < K < N ) \\u2013 \\u043a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u043a\\u043e\\u0440\\u043e\\u0432. \\u0412\\u043e \\u0432\\u0442\\u043e\\u0440\\u043e\\u0439 \\u0441\\u0442\\u0440\\u043e\\u043a\\u0435\\u00a0\\u0437\\u0430\\u0434\\u0430\\u044e\\u0442\\u0441\\u044f N \\u043d\\u0430\\u0442\\u0443\\u0440\\u0430\\u043b\\u044c\\u043d\\u044b\\u0445 \\u0447\\u0438\\u0441\\u0435\\u043b \\u0432 \\u043f\\u043e\\u0440\\u044f\\u0434\\u043a\\u0435 \\u0432\\u043e\\u0437\\u0440\\u0430\\u0441\\u0442\\u0430\\u043d\\u0438\\u044f \\u2013 \\u043a\\u043e\\u043e\\u0440\\u0434\\u0438\\u043d\\u0430\\u0442\\u044b \\u0441\\u0442\\u043e\\u0439\\u043b (\\u043a\\u043e\\u043e\\u0440\\u0434\\u0438\\u043d\\u0430\\u0442\\u044b \\u043d\\u0435 \\u043f\\u0440\\u0435\\u0432\\u043e\\u0441\\u0445\\u043e\\u0434\\u044f\\u0442 109)\\r\\n \\n", "output_specification": "\\n\\r\\n \\u0412\\u044b\\u0445\\u043e\\u0434\\u043d\\u044b\\u0435 \\u0434\\u0430\\u043d\\u043d\\u044b\\u0435\\r\\n \\n\\r\\n\\t\\t\\u0412\\u044b\\u0432\\u0435\\u0434\\u0438\\u0442\\u0435 \\u043e\\u0434\\u043d\\u043e \\u0447\\u0438\\u0441\\u043b\\u043e \\u2013 \\u043d\\u0430\\u0438\\u0431\\u043e\\u043b\\u044c\\u0448\\u0435\\u0435 \\u0432\\u043e\\u0437\\u043c\\u043e\\u0436\\u043d\\u043e\\u0435 \\u0434\\u043e\\u043f\\u0443\\u0441\\u0442\\u0438\\u043c\\u043e\\u0435 \\u0440\\u0430\\u0441\\u0441\\u0442\\u043e\\u044f\\u043d\\u0438\\u0435.\\r\\n \\n"}\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试指定Ensure_ascii=False ,如下所示:Python Saving JSON Files as UTF-8,但它会抛出 UnicodeEncodeError:
\n\nUnicodeEncodeError: \'charmap\' codec can\'t encode characters in position 11-12: character maps to <undefined>\nRun Code Online (Sandbox Code Playgroud)\n\n总而言之,如何将字典转储到 JSON 文件而不弄乱编码?
\nhan*_*ras 12
您需要打开指定文件编码的文件。
with open('Data{0}.json'.format(1), 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False)
Run Code Online (Sandbox Code Playgroud)
这样我就成功转储了你的示例数据。
| 归档时间: |
|
| 查看次数: |
8377 次 |
| 最近记录: |