转换字符串.解码('utf8')从Python2到Python3

2024-10-04 01:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在把一些代码从python2转换成python3。在

在python2中,我可以做以下事情:

>>> c = '\xe5\xb8\x90\xe6\x88\xb7'
>>> print c
帐户
>>> c.decode('utf8')
u'\u5e10\u6237'

如何在python3中获得相同的输出(u'\u5e10\u6237')?在


编辑

对于其他有此问题的人,我在查看了这些响应后意识到,要利用结果,每个字符都需要作为一个单独的元素来处理。转义的unicode表示形式(如“\u5e10\u6237”)是一个字符串,因此它不会自然地分成与原始汉字相对应的部分。在

^{pr2}$

除非您想在程序的下一部分中再次解析它,否则必须将输入字符串中的每个字符分开,并将其单独转换为数组。因此,我的解决方案是:

>>> [l.encode('unicode-escape').decode('ascii') for l in c]
['\\u5e10', '\\u6237']

另一种解决方案是将每个字符变成十六进制表示:

>>> [hex(ord(l)) for l in c]
['0x5e10', '0x6237']

谢谢你的帮助。在


Tags: 字符串代码inforunicode解决方案字符事情
2条回答

返回与python2中相同的unicode是不可能的:我没有看到像python2和python3中那样的unicode对象。但是可以获得unicode对象的值。在

为此,您需要做几件事:
-创建值为'\xe5\xb8\x90\xe6\x88\xb7'的字节元素 -将此字节元素转换为字符串 -从字符串获取unicode代码

第一步很容易。要创建一个与c值相同的字节元素“c”,只需执行以下操作:

c = b'\xe5\xb8\x90\xe6\x88\xb7'

然后,读取元素

^{pr2}$

最后,我创建了一个函数来将字符串转换为其字符+unicode表示

def get_unicode_code(text):
    result = ""
    for char in text:
        ord_value = ord(char)
        if ord_value < 128:
            result += char
        else:
            hex_string = format(ord_value, "x") # turning the int into its hex value
            if len(hex_string) == 2:
                unicode_code = "\\x"+hex_string
            elif len(hex_string) == 3:
                unicode_code = "\\u0"+hex_string
            else:
                unicode_code = "\\u"+hex_string
            result += unicode_code
    return result

get_unicode_code(d)将返回与d.encode('unicode-escape').decode('ascii')相同的结果,尽管它很可能效率较低。在

它以一个字符串作为参数,并返回一个带有unicode的字符串,而不是它所表示的字符。在

这称为“unicode转义”编码。下面是一个在python3中实现这种行为的示例:

In [11]: c = b'\xe5\xb8\x90\xe6\x88\xb7'

In [12]: d = c.decode('utf8')

In [13]: print(d)
帐户

In [14]: print(d.encode('unicode-escape').decode('ascii'))
\u5e10\u6237

如果您希望它是bytes,而不是{},那么您可以简单地去掉{}。在

相关问题 更多 >