Aid*_*n.T 5 python unicode encoding utf-8
我正在尝试这段代码:
s = "????"
'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
Run Code Online (Sandbox Code Playgroud)
但是会发生以下错误:
Run Code Online (Sandbox Code Playgroud)'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd3:序数不在范围内(128)
我试过'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))但没有改变.
我该怎么办?
因为你使用的是python 2,所以s = "????"是一个字节字符串(无论你的终端使用什么编码,大概是utf8):
>>> s = "????"
>>> s
'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85'
Run Code Online (Sandbox Code Playgroud)
您不能使用encode字节字符串(因为它们已经"编码").你正在寻找unicode("真正的")字符串,在python2中必须加上前缀u:
>>> s = u"????"
>>> s
u'\u0633\u0644\u0627\u0645'
>>> '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
'1101100010110011110110011000010011011000101001111101100110000101'
Run Code Online (Sandbox Code Playgroud)
如果您从函数中获取字节字符串,raw_input那么您的字符串已经编码 - 只需跳过该encode部分:
'{:b}'.format(int(s.encode('hex'), 16))
Run Code Online (Sandbox Code Playgroud)
或者(如果你要用它做任何其他事情)将其转换为unicode:
s = s.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
这假设您的输入是UTF-8编码,如果不是这种情况,请先检查sys.stdin.encoding.
i10n的内容很复杂,这里有两篇文章可以帮助你进一步:
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |