python的字符集小问题,请帮我解释一下

我在python 2.7 shell里面执行

clipboard.png

后来我在Ulipad编辑器写同样的代码,文件是utf-8格式
clipboard.png

提示异常,后来我编码
clipboard.png

这样才能正常显示文字!!

为什么在命令行写的中文unicode就能直接打印出来,而在软件中写的代码,就会出现问题?
请教一下,这怎么解释原因~

阅读 3.1k
3 个回答

python2关于中文处理上,在软件和命令行是有不一样的地方,在软件里运行只要print '测试'就行了,具体这个软件是怎么回事我真不清楚,因为我pycharm编辑器里是可以这样输出的。而在命令行print文本的时候会被系统的cmd.exe自动编码成gbk的格式,这个你在命令行的属性里可以看到,所以你直接print unicode编码就会变成中文。但是你在shell直接用ss就会显示出变量的值是unicode编码。而python3就没那么多问题了。

clipboard.png

clipboard.png

我理解是unicode是一个中间状态码,如果你要输出必须要转换成其他编码(如utf8、gbk、ascii

其他编码----decode----> unicode ----encode----> 其他编码

问题的关键,是系统的shell和你Ulipad编辑器默认的字符集不一样:

  • windows系统默认的是gbk,python自动转换成gbk输出没有问题
  • 编辑器环境默认是acsii码,python自动转换成acsii码出错,应为acsii不能表示中文

你的 shell 跟 那个 UliPad 本身支持的编码不同吧。

print 出来的信息一定是“字节”,不同的环境它们以什么编码去“理解”这些字节是不一样的。如果不匹配,就可能会报错了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题