python转成utf8字符串_Python反转UTF8字符串

python2字符串是字节字符串,UTF-8编码的文本使用多个字节。仅仅因为您的终端能够将UTF-8字节解释为字符,这并不意味着Python知道什么字节构成一个UTF-8字符。在

bytestring由6个字节组成,每两个字节组成一个字符:>>> a = "čšž"

>>> a

'\xc4\x8d\xc5\xa1\xc5\xbe'

但是,UTF-8使用多少字节取决于Unicode标准中字符的定义位置;ASCII字符(Unicode标准中的前128个字符)每个只需要1个字节,而许多表情符号需要4个字节!在

在UTF-8的顺序是所有的;通过testring反转上面的字节,导致UTF-8标准中的一些乱七八糟,但是中间的4个字节正好发生在是有效的UTF-8序列(对于š和ō):

^{pr2}$

您必须将字节字符串解码为unicode对象,该对象由单个字符组成。反转该对象将得到正确的结果:b = a.decode('utf8')[::-1]

print b

您始终可以将对象重新编码为UTF-8:b = a.decode('utf8')[::-1].encode('utf8')

请注意,在Unicode中,当使用combining characters时,在反转文本时仍然可能遇到问题。使用组合字符反转文本将那些组合字符放在组合字符的前面而不是后面,因此它们将与错误的字符组合在一起:>>> print u'e\u0301a'

éa

>>> print u'e\u0301a'[::-1]

áe

您可以通过将Unicode数据转换为其标准化形式(用1码位形式代替组合)来避免这种情况,但是还有许多其他外来的Unicode字符不能很好地处理字符串反转。在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值