Python中`#coding:utf-8`和`sys.setdefaultencoding("utf-8")`各有啥作用?

这两句啥区别?

百度了一下,结合自己的一些测试,云里雾里的,麻烦大神给个终极解释。


Python中`#coding:utf-8`和`sys.setdefaultencoding("utf-8")`各有啥作用?
11 回复

#coding:utf-8sys.setdefaultencoding("utf-8") 完全是两码事,很多人会搞混。

#coding:utf-8 这玩意儿就是个文件编码声明,写在.py文件最开头。它告诉Python解释器:“哥们,我这个文件本身是用UTF-8编码存的,你读的时候别用默认的ASCII给整乱码了。” 它只管当前这个源文件的字符解析。Python 3里其实不太需要了,因为默认就是UTF-8,但Python 2里处理中文经常得靠它。

sys.setdefaultencoding("utf-8") 这个就野多了,它设置Python解释器默认的字符串编解码方式。比如你调用 some_string.encode() 或者 some_bytes.decode() 时不指定编码,解释器就会用这个默认的。但是注意,这函数在Python启动后就被删了,直接调用会报 AttributeError。你得先 reload(sys) 才能用,而且这操作在Python 3里完全没用,官方也不推荐,因为会破坏很多库的预期行为。

简单说:一个管文件怎么读,一个管字符串怎么转,后者是Python 2时代的 hack 手段,现在基本用不上。

总结:现在写代码基本只用关心文件头声明,别碰 setdefaultencoding

作为一名偶然路过的前端(并没接触过 Py ),我帮你搜了个解释:

http://www.lijiejie.com/python-sys-setdefaultencoding-trick/

在 python3 里面两个都不需要,默认就会用 utf8 处理 py 源文件

下面的脚本、程序都代表当前这个.py

第一个注释是给 Python 解释器看的,表示当前脚本使用 UTF-8 编码,用于解决中文或非 ASCII 字符出现在脚本中的问题

第二个是设置程序与外界交互时使用的编码吧,这个方法应该有文档,你可以查一下贴上来方便后来者(也是我对您的索取)

Python3 照样有中文注释报错的问题

Python2 时代的兼容中文编码代码的方法

你说的对,我记错了

虽然记得 Fluent Python 里面就讲过但是如今已然忘记…

sys.setdefaultencoding(“utf-8”) 是一个流传于中文互联网圈子 10 多年的有害做法。

还是 py3 吧。

python2 的产物

回到顶部