Python中`#coding:utf-8`和`sys.setdefaultencoding("utf-8")`各有啥作用?
这两句啥区别?
百度了一下,结合自己的一些测试,云里雾里的,麻烦大神给个终极解释。
Python中`#coding:utf-8`和`sys.setdefaultencoding("utf-8")`各有啥作用?
#coding:utf-8 和 sys.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 的产物

