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