1
xiaobai987 2017 年 4 月 5 日
第二句不是已经提示是 utf-8 了吗
|
2
LokiSharp 2017 年 4 月 5 日
sys.argv 传入的是 Unicode ,不需要 encode 吧?
|
3
zhanglintc 2017 年 4 月 5 日 via iPhone
会不会 str 已经是 unicode 了 所以不用 encode 了
|
4
zhanglintc 2017 年 4 月 5 日 via iPhone
写错了 str 已经不是 unicode 了 不用 encode 了
|
5
LokiSharp 2017 年 4 月 5 日
额。。。貌似说错了,应该说是 sys.argv 传入的是 UTF-8 ,不需要 encode ,然后 Python 内部声明的都是 Unicode 所以要 encode 成其他的。。。
|
6
fds 2017 年 4 月 5 日
不写 encode , python 2 3 下都正常。写 encode , python 2 失败, 3 正常。
mac 下 iterm 运行的。不知楼主怎么回事。直接打印看看? |
7
yeyuexia 2017 年 4 月 5 日
|
8
grimpil OP @xiaobai987 即是说通过参数传递进来的 str 本身就是 utf-8 编码的字符串?
因为我后面要用某个库里的一个函数需要对 str 执行 encode('utf-8'),里面的代码不方便改动, 那么在此之前,我需要的把 str 变成普通的字符串,然后确保 str.encode('utf-8')能顺利执行,请问这需要怎么做 |
9
Eleutherios 2017 年 4 月 5 日 via iPhone
@grimpil 升级一下 python 版本?
|
10
lxy42 2017 年 4 月 5 日 via Android
unicode 才要 encode
byte string 才要 decode |
11
lxy42 2017 年 4 月 5 日 via Android
@Eleutherios 他已经是 python 3 了
|
12
xiaobai987 2017 年 4 月 5 日
@grimpil decode 试试 我也是新手
|
13
lxy42 2017 年 4 月 5 日
代码( python2.7 ):
# -*- coding: utf8 -*- import sys str = sys.argv[1] print str #打印出来是“你好” if str == "你好": print 'ok' #打印 ok print '你好'.encode('utf-8') # 这行报错 print str.encode('utf-8') 打印信息如下: 你好 ok Traceback (most recent call last): File "test.py", line 10, in <module> print '你好'.encode('utf-8') UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) python2 的话,如果文件编码和终端编码相同,应该会打印出 ok 的。 python3 的话,我这边是没问题的,都是正常的,和#7 一致。 |
14
grimpil OP @xiaobai987
@LokiSharp @zhanglintc @fds @yeyuexia @Eleutherios @lxy42 谢谢各位,问题暂时解决了, str.encode('utf-8','surrogateescape') 这样就没问题了 不过编码解码这一块,我确实得花点功夫研究一下, 不然每次遇到问题都要折腾好久,太痛苦了 |
15
zhanglintc 2017 年 4 月 5 日 via iPhone
@grimpil 长见识了,赶紧学习了一波 surrogateescape
|
16
lzjun 2017 年 4 月 7 日
|