在python中将字符串转换为unicode类型
我正在尝试以下代码:在python中将字符串转换为unicode类型,python,unicode,encoding,utf-8,Python,Unicode,Encoding,Utf 8,我正在尝试以下代码: s = "سلام" '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16)) 但出现这种错误: UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0xd3:序号不在范围内(128) 我尝试了“{:b}”格式(int(s.encode('utf-8')。encode('hex'),16)),但没有任何更改 我该怎么办?因为您使用的是python 2,s=“سلام”是一个字节字符串(无论
s = "سلام"
'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
但出现这种错误:
UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0xd3:序号不在范围内(128)
我尝试了“{:b}”格式(int(s.encode('utf-8')。encode('hex'),16))
,但没有任何更改
我该怎么办?因为您使用的是python 2,
s=“سلام”
是一个字节字符串(无论您的终端使用何种编码,大概是utf8):
不能对字节字符串进行编码(因为它们已经“编码”)。您正在寻找unicode(“real”)字符串,python2中的字符串必须以u
作为前缀:
>>> s = u"سلام"
>>> s
u'\u0633\u0644\u0627\u0645'
>>> '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))
'1101100010110011110110011000010011011000101001111101100110000101'
如果您从函数(如raw\u input
)中获取字节字符串,则您的字符串已被编码-只需跳过encode
部分:
'{:b}'.format(int(s.encode('hex'), 16))
或者(如果要对其执行其他操作)将其转换为unicode:
s = s.decode('utf8')
这假设您的输入是UTF-8编码的,如果不是这样,请先检查sys.stdin.encoding
i10n的内容很复杂,这里有两篇文章将进一步帮助您:
请复制并粘贴回溯文本,而不是屏幕截图。我复制并粘贴了回溯文本…您有一个bytestring,而不是unicodes
已经在您的终端使用的任何编解码器中编码。是的,如果我将其更改为s=u‘سلام’,所有问题都会解决,但它是一个变量,我通过简单的输入从用户处接收。它不是一个静态字符串。如何将不同的字符串放入u“”?终端中的输入使用sys.stdin.encoding
codec进行编码。你们可以用它来解码为Unicode,这是我从用户那个里收到的一个变量。它不是一个静态字符串。如何在u“”中放置不同的字符串?是的,那么我应该怎么做?如何将其转换为unicode字符串?
'{:b}'.format(int(s.encode('hex'), 16))
s = s.decode('utf8')