在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,而不是unicode
s
已经在您的终端使用的任何编解码器中编码。是的,如果我将其更改为s=u‘سلام’,所有问题都会解决,但它是一个变量,我通过简单的输入从用户处接收。它不是一个静态字符串。如何将不同的字符串放入u“”?终端中的输入使用
sys.stdin.encoding
codec进行编码。你们可以用它来解码为Unicode,这是我从用户那个里收到的一个变量。它不是一个静态字符串。如何在u“”中放置不同的字符串?是的,那么我应该怎么做?如何将其转换为unicode字符串?
'{:b}'.format(int(s.encode('hex'), 16))
s = s.decode('utf8')