鱼C论坛

 找回密码
 立即注册
查看: 1899|回复: 28

[已解决]关于Python:如何从json文件中读取中文问题

[复制链接]
发表于 2021-8-18 09:24:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的文件 username.json 里面有中文,比如里面的内容为  "电脑"
现在我利用下面的代码来读取它:
import json
filename = 'username.json'
with open(filename) as file_object:
    username = json.load(file_object)
    print("Welcome back, "+username+"!")
用这一串代码我运行时会报错。我用了网上的一些办法,他们写的东西特别多并且都没用,请问大佬们我这个该怎么修改代码才能读取这文件里的中文呢?
最佳答案
2021-8-18 11:02:09
LeonardCohenX 发表于 2021-8-18 10:47
我这个帖子中讲的报错是打印结果为:Welcome back, 鐢佃剳!
而不是Welcome back, 电脑!

这样可以明白吗
微信截图_20210818110103.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-18 09:27:51 | 显示全部楼层
这样就可以
  1. import json
  2. filename = 'username.json'
  3. with open(filename, 'r') as file_object:
  4.     username = json.loads(file_object.read())
  5.     print("Welcome back, "+username+"!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 09:38:27 | 显示全部楼层

朋友,我用你这个还是显示报错,如果你不嫌麻烦就用你的编辑器试一下,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 09:58:18 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 09:38
朋友,我用你这个还是显示报错,如果你不嫌麻烦就用你的编辑器试一下,

如果的 username.json 文件里面只有“电脑”这两个字,那你直接这样就可以
  1. import json
  2. filename = 'username.json'
  3. with open(filename, 'r') as file_object:
  4.     username = file_object.read()
  5.     print("Welcome back, "+username+"!")
复制代码


如果是 json 格式的内容,那就按我刚刚写的那样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 09:58:42 | 显示全部楼层
一般的json文件存中文用Unicode可以避免文件编码问题
你存的时候这样存 读的时候就无视编码打开 比如下面的这种
  1. {
  2.     "customName" : "\u521D\u53F7\u673A",
  3.     "bodyPhysics" : 0.6,
  4.     "modelPos"    : {
  5.         "x" : -3.13331604003906,
  6.         "y" : -3.47777724266052,
  7.         "z" : -0.800000011920929
  8.     },
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 10:41:09 | 显示全部楼层
louxinghao 发表于 2021-8-18 09:58
如果的 username.json 文件里面只有“电脑”这两个字,那你直接这样就可以

朋友感谢你的回复,刚才被别人叫出去了,没有及时回复不好意思
我刚才可能没说清楚,打印的内容是:
Welcome back, 鐢佃剳!
而不是:
Welcome back, 电脑!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 10:46:16 | 显示全部楼层
kogawananari 发表于 2021-8-18 09:58
一般的json文件存中文用Unicode可以避免文件编码问题
你存的时候这样存 读的时候就无视编码打开 比如下面 ...

朋友,存中文我会,我用的是:
import json
username = input("What is your name? ")
filename = 'username.json'
with open(filename, 'w',encoding='utf-8') as f_obj:
    json.dump(username,f_obj,ensure_ascii=False)
    print("We'll remember you when you come")
但是我不会读中文,读中文我用:
import json
filename = 'username.json'
with open(filename) as file_object:
    username = json.load(file_object)
    print("Welcome back, "+username+"!")
但是用这个打印的结果是:
Welcome back, 鐢佃剳!
打印的结果不是电脑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 10:47:33 | 显示全部楼层
我这个帖子中讲的报错是打印结果为:Welcome back, 鐢佃剳!
而不是Welcome back, 电脑!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 10:53:24 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 10:46
朋友,存中文我会,我用的是:
import json
username = input("What is your name? ")

为什么要用 ensure_ascii=False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 10:55:40 | 显示全部楼层
kogawananari 发表于 2021-8-18 10:53
为什么要用 ensure_ascii=False

网上学的,这个可以存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 10:56:52 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 10:55
网上学的,这个可以存

去掉 ensure_ascii=False

能正常输出电脑吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 10:58:55 | 显示全部楼层
kogawananari 发表于 2021-8-18 10:56
去掉 ensure_ascii=False

能正常输出电脑吗

去掉后比如我输入"武"
打印的结果就是:"\u6b66"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 10:59:09 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 10:41
朋友感谢你的回复,刚才被别人叫出去了,没有及时回复不好意思
我刚才可能没说清楚,打印的内容是:
We ...

编码问题
  1. open(filename, 'r', encoding='utf8')
复制代码

这样就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 11:02:09 | 显示全部楼层    本楼为最佳答案   
LeonardCohenX 发表于 2021-8-18 10:47
我这个帖子中讲的报错是打印结果为:Welcome back, 鐢佃剳!
而不是Welcome back, 电脑!

这样可以明白吗
微信截图_20210818110103.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 11:11:02 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 10:58
去掉后比如我输入"武"
打印的结果就是:"%u6b66"

怎么可能 打印结果应该是中文 实测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 11:11:28 | 显示全部楼层

这样看懂了,这样打印的结果就正确了,谢谢你😁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 11:12:16 | 显示全部楼层
louxinghao 发表于 2021-8-18 10:59
编码问题

这样就可以了

是的就是这样,谢谢你😁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-18 11:12:36 | 显示全部楼层
我能输出中文
QQ截图20210818111152.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-18 11:16:23 | 显示全部楼层

我也不知道你这个为什么会成功,可能你这个能够自动编码,我用的是VS code,必须用:
open(filename, 'r',encoding='utf8')
用这种格式才能打印出正确的中文
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-18 11:17:06 | 显示全部楼层
LeonardCohenX 发表于 2021-8-18 11:16
我也不知道你这个为什么会成功,可能你这个能够自动编码,我用的是VS code,必须用:
open(filename, 'r' ...

至于为啥我也不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 00:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表