'%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1')
Traceback (most recent call last):
File "C:\Users\zhicfeng\Envs\vxmgr\lib\site-packages\IPython\core\interactiveshell.py", line 2878, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-19-ca870cdd0e7e>", line 1, in <module>
'%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
'%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4','1')
Out[20]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb41'
1
geew 2019-03-11 10:15:23 +08:00
In [2]: '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4','1')
Out[2]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb41' In [3]: '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1'.encode('utf8')) Out[3]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb41' |
2
geew 2019-03-11 10:16:03 +08:00
In [5]: '%s%s' % ('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4'.decode('utf8'),u'1')
Out[5]: u'\u541b\u4e0d\u89c1\u9ec4\u6cb3\u4e4b\u6c341' |
3
est 2019-03-11 10:29:55 +08:00
点开帖子之前估计是 win。。果然是 win
|
4
Q2019cate 2019-03-11 10:33:01 +08:00
#coding=utf-8
|
5
jdhao 2019-03-11 10:37:38 +08:00
原始代码不贴一下,你说个🦆,云 debug ?另外,你做了什么?谷歌过相关问题吗?
|
6
lxy42 2019-03-11 10:40:49 +08:00
```
In [1]: '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1') --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-1-ca870cdd0e7e> in <module>() ----> 1 '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1') UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128) In [2]: '%s' % '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4' Out[2]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4' In [3]: print '%s' % '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4' 君不见黄河之水 In [4]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4'.decode('utf8') Out[4]: u'\u541b\u4e0d\u89c1\u9ec4\u6cb3\u4e4b\u6c34' In [5]: print'\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4'.decode('utf8') 君不见黄河之水 In [6]: print'\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4'.decode('gbk') --------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-6-1ddec8fed84f> in <module>() ----> 1 print'\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4'.decode('gbk') UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 20: incomplete multibyte sequence In [7]: '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4','1') Out[7]: '\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb41' In [8]: ``` %后面的格式化参数一个是 bytes-string,一个是 unicode-string,最好统一一下。 |
7
chaleaochexist OP @jdhao 不需要原始代码.直接可以重现.
我大概知道是什么问题. -- 就是 uncode 和 str 的编解码问题 但是 '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4',u'1') '%s%s'%('\xe5\x90\x9b\xe4\xb8\x8d\xe8\xa7\x81\xe9\xbb\x84\xe6\xb2\xb3\xe4\xb9\x8b\xe6\xb0\xb4','1') 一个成功一个不成功.请问如何谷歌. |
8
chaleaochexist OP @est 何出此言?
|
9
Kylin30 2019-03-11 11:53:46 +08:00
蛇吹灯之编码鬼洞
|
10
fy 2019-03-11 11:55:45 +08:00
不是 还有人在用 2.7 的吗
|
11
est 2019-03-11 12:00:26 +08:00
@chaleaochexist win 下编码坑很多。有的时候不是 py 的问题。是 cmd 的问题。
|
12
jdhao 2019-03-11 12:07:42 +08:00
@chaleaochexist 直接搜下面的错误即可,
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128) |
13
chaleaochexist OP @jdhao 问题点不在这里.
|
14
ltux 2019-03-11 13:21:47 +08:00 via Android 1
只有你自己知道问题点在哪里,别人怎么会知道。花点时间搞清啥是 code point 啥是 encoding
,你的问题就解决了。Python 2.7 默认是 ascii 编码,看到 u'1' 知道应该用 utf-8,所以一个成功一个失败。 参考 https://docs.python.org/2.7/howto/unicode.html 也可参考 O'Reilly 出版社《 Learning Python 》,有一章专讲编码问题 |
15
XxxxD 2019-03-11 14:08:31 +08:00
python3 的 encode 是 string to byte, decode 是 byte to string, python2 的要反一下我记得,楼主好好找下关于 encode, decode 的说明? 另外也可以试试 errors = "ignore"
|
16
chaleaochexist OP @ltux
`Python 2.7 默认是 ascii 编码,看到 u'1' 知道应该用 utf-8,所以一个成功一个失败。` 你好,请教, 谁看到 u'1' 知道应该用 utf-8? python 解释器吗? python 解释器在处理字符串存储的时候?还是在翻译'%s'%u'1'的时候. 确实不太清楚你说的是什么... 我对这里概念不是很清晰. 如果能解释一下 那多谢了. |
17
no1xsyzy 2019-03-11 15:01:43 +08:00 2
首先可以肯定是发生了 '\xe5...'.decode('ascii')
结合 #2 可以很容易发现,旧式 '%' 格式化在存在 unicode 的时候把所有的都处理成 unicode。 而默认的 unicode(some_byte_string) 采用了 some_byte_string.decode('ascii') 同报错最小复现:unicode('\xe5') Available at: <https://repl.it/repls/ImpressionableGraciousPorts> |
18
www5070504 2019-03-11 15:12:35 +08:00
没人吐槽一下 gbk 编码么
|
19
chaleaochexist OP @no1xsyzy 这就是我想要的答案.感谢感谢.
|