
http://blog.ernest.me/post/python-setdefaultencoding-unicode-bytes
我看了下现在(包括 V2EX 上)还在使用 sys.setdefaultencoding('utf-8') 来解决中文编码问题的有很多,而且很多人在使用的时候压根没有意识到带来的 bug。特写此文与大家讨论。
1 florije Feb 1, 2016 一点都没说到点上,建议搜下 v2 历史,有个帖子说到了,建议好好看看再 append 。 |
2 zjq426 Feb 1, 2016 1. 这么用确实方便 2. 这么用确实用 dict 的时候遇到过问题 3. 这么用确实有诡异的疑似 bug 出现,或者说,出现了一些和 naive 理解上偏差 好吧我以后不这么用了,我错了。 所有 text string 都应该是 unicode 类型,而不是 str |
3 所以 Python 3 是没问题咯 |
4 zjq426 Feb 1, 2016 然而你就不能利用 python2 提供的 unicode=>ascii 转换的便利了 |
5 wgwang Feb 1, 2016 python3, python3, python3 重要的事说 3 遍 |
6 aivier Feb 1, 2016 隔壁 NodeJS 路过看看→_→...GBK 也是比较麻烦的事,要用 iconv |
7 nooper Feb 1, 2016 via iPad 80 %以上的代码是不良习惯, 10 是 hacking code 。 10 编的是实质性的代码。奇怪的 hacking code 为什么要写大家一向是 badu 出来的 |
8 pynix Feb 1, 2016 python3 才是正确的选择。。。 |
11 ernest OP @florije 能告知那篇帖子的地址或者关键词吗,我来找来读下。谢谢! 关键点并不在 print 上吧?任何涉及到 encode/decode 的操作都会出问题。 |
12 FrankFang128 Feb 1, 2016 via Android Python 永远的痛 |
13 ernest OP @FrankFang128 也还好,能按照最佳实践来不会出问题。只能说 Python 给的糖太多了。 |
14 tt0411 Feb 1, 2016 python2 脚本开头习惯性添加: from __future__ import unicode_literals |
15 loading Feb 1, 2016 via Android python 最不爽就是这里! |
17 ernest OP |
19 florije Feb 1, 2016 @ernest 首先三个概念: 1. str is for bytes, NOT strings 2. unicode is for strings 3. UTF-8, UTF-16, and UTF-32 are serialization formats NOT Unicode 然后尽量别用 print 打印比较。 然后再看看上面的兼容性问题~以及博客里面说的内容~ |
20 florije Feb 1, 2016 @ernest 然后你再看看你所说的 encode , decode 是什么情况? encode(): Gets you from Unicode -> bytes decode(): Gets you from bytes -> Unicode so ,这么来看问题都一点点解决了吧? |
21 Tink PRO 上 python3 |
24 TankyWoo Feb 1, 2016 @tt0411 pocoo 的实践是不建议用 unicode_literals ,虽然我倾向于用... http://click.pocoo.org/5/python3/ https://github.com/PythonCharmers/python-future/issues/22 |
25 ming2281 Feb 1, 2016 via Android py2 中有别的语言没有的编码问题, 属于基本功了, 不至于动用 sys |
26 fy Feb 1, 2016 危言耸听! 另外讲道理还是赶紧迁移到 Python3 |
27 latyas Feb 2, 2016 defaultencoding = ascii 难道就没问题了? = utf-8 才是本该正确的。 |