1
xunyu 2014-10-27 17:18:13 +08:00
2to3和3to2
|
2
Daniel65536 2014-10-27 17:28:59 +08:00
from io import open
在python2下: open(name[, mode[, buffering]]) io.open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]]) |
3
em70 2014-10-27 17:30:07 +08:00
3和2不兼容,2有2的写法,不能直接放过来
|
4
lincanbin 2014-10-27 18:53:19 +08:00
要两个版本下运行结果一致,就写两套代码,然后拿sys.version_info出来判断一下决定用那套
|
5
ericls 2014-10-27 20:20:38 +08:00 via Android
from io import open
|
6
xucheng 2014-10-27 22:10:10 +08:00
import six
|
7
fghzpqm 2014-10-29 17:35:38 +08:00
Python 2:
$ ipython Python 2.7.8 (default, Aug 20 2014, 12:09:53) In [1]: import codecs In [2]: print codecs.open('GBK', encoding='gbk').read() 你好 Python 3: $ ipython Python 3.4.2 (default, Oct 29 2014, 17:32:14) In [1]: import codecs In [2]: print(codecs.open('GBK', encoding='gbk').read()) 你好 |
8
yakczh OP @fghzpqm python3 输出正常
python27下 报错 ---------- python27 ---------- Traceback (most recent call last): File "codec-read-gbk.py", line 5, in <module> print(codecs.open('gbk.txt', encoding='gbk').read()) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128) 输出完成 (耗时 0 秒) - 正常终止 |
9
fghzpqm 2014-10-30 23:37:25 +08:00
@yakczh 看输出的异常信息:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128) 是在 print 的时候将 unicode 用默认的 ASCII codec 编码(encode)的时候出错。和你直接: print u"你好" 抛出的是同样的异常。 也就是说,为了确保你 print 的 unicode 不抛异常,你需要显示的把 unicode 编码成你终端使用的文本编码。 |