python unicode转int_在python中将字符串转换为unicode类型

我正在尝试这段代码:

s = "سلام"

'{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))

但是会发生以下错误:

06001

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xd3 in position 0: ordinal not in range(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'

您不能编码字节字符串(因为它们已经“编码”).你正在寻找unicode(“真实”)字符串,在python2中必须以u为前缀:

>>> s = u"سلام"

>>> s

u'\u0633\u0644\u0627\u0645'

>>> '{:b}'.format(int(s.encode('utf-8').encode('hex'), 16))

'1101100010110011110110011000010011011000101001111101100110000101'

如果您从诸如raw_input之类的函数获取字节字符串,那么您的字符串已经被编码 – 只需跳过编码部分:

'{:b}'.format(int(s.encode('hex'), 16))

或者(如果你要用它做任何其他事情)将其转换为unicode:

s = s.decode('utf8')

这假设您的输入是UTF-8编码,如果情况可能不是这样,请首先检查sys.stdin.encoding.

i10n的内容很复杂,这里有两篇文章可以帮助你进一步:

标签:python,encoding,unicode,utf-8

来源: https://codeday.me/bug/20190529/1176463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值