1
xiaobai987 2017-04-05 11:24:27 +08:00
第二句不是已经提示是 utf-8 了吗
|
2
LokiSharp 2017-04-05 11:26:10 +08:00
sys.argv 传入的是 Unicode ,不需要 encode 吧?
|
3
zhanglintc 2017-04-05 11:28:07 +08:00 via iPhone
会不会 str 已经是 unicode 了 所以不用 encode 了
|
4
zhanglintc 2017-04-05 11:28:37 +08:00 via iPhone
写错了 str 已经不是 unicode 了 不用 encode 了
|
5
LokiSharp 2017-04-05 11:30:56 +08:00
额。。。貌似说错了,应该说是 sys.argv 传入的是 UTF-8 ,不需要 encode ,然后 Python 内部声明的都是 Unicode 所以要 encode 成其他的。。。
|
6
fds 2017-04-05 11:32:15 +08:00
不写 encode , python 2 3 下都正常。写 encode , python 2 失败, 3 正常。
mac 下 iterm 运行的。不知楼主怎么回事。直接打印看看? |
7
yeyuexia 2017-04-05 11:42:50 +08:00
|
8
grimpil OP @xiaobai987 即是说通过参数传递进来的 str 本身就是 utf-8 编码的字符串?
因为我后面要用某个库里的一个函数需要对 str 执行 encode('utf-8'),里面的代码不方便改动, 那么在此之前,我需要的把 str 变成普通的字符串,然后确保 str.encode('utf-8')能顺利执行,请问这需要怎么做 |
9
Eleutherios 2017-04-05 12:24:38 +08:00 via iPhone
@grimpil 升级一下 python 版本?
|
10
lxy42 2017-04-05 12:44:22 +08:00 via Android
unicode 才要 encode
byte string 才要 decode |
11
lxy42 2017-04-05 12:45:10 +08:00 via Android
@Eleutherios 他已经是 python 3 了
|
12
xiaobai987 2017-04-05 13:01:18 +08:00
@grimpil decode 试试 我也是新手
|
13
lxy42 2017-04-05 13:05:28 +08:00
代码( 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-04-05 20:46:10 +08:00 via iPhone
@grimpil 长见识了,赶紧学习了一波 surrogateescape
|
16
lzjun 2017-04-07 01:22:56 +08:00
|