将字符串.decode(';utf8';)从python2转换为python3

将字符串.decode(';utf8';)从python2转换为python3,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我正在将一些代码从python2转换为python3 在python2中,我可以做以下事情: >>> c = '\xe5\xb8\x90\xe6\x88\xb7' >>> print c 帐户 >>> c.decode('utf8') u'\u5e10\u6237' 如何在python3中获得相同的输出(u'\u5e10\u6237') 编辑 对于其他有此问题的人,我在查看了响应后意识到,要利用结果,每个字符都需要作为单个元素处理。像“\

我正在将一些代码从python2转换为python3

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

>>> c = '\xe5\xb8\x90\xe6\x88\xb7'
>>> print c
帐户
>>> c.decode('utf8')
u'\u5e10\u6237'
如何在python3中获得相同的输出(u'\u5e10\u6237')


编辑

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

>>> c = '帐户'
>>> type(c.encode('unicode-escape').decode('ascii'))
<class 'str'>
>>> [l for l in c.encode('unicode-escape').decode('ascii')]
['\\', 'u', '5', 'e', '1', '0', '\\', 'u', '6', '2', '3', '7']
另一种解决方案是将每个字符转换为十六进制表示:

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

感谢您的帮助。

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

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

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

c = b'\xe5\xb8\x90\xe6\x88\xb7'
然后,读取元素

c_string = c.decode() # default encoding is utf-8
最后,我创建了一个函数,将字符串转换为字符+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
def get_unicode_代码(文本):
result=“”
对于文本中的字符:
ord_值=ord(字符)
如果ord_值小于128:
结果+=字符
其他:
十六进制字符串=格式(ord_值,“x”)#将整数转换为十六进制值
如果len(十六进制字符串)==2:
unicode\u code=“\\x”+十六进制\u字符串
elif len(十六进制字符串)==3:
unicode\u code=“\\u0”+十六进制\u字符串
其他:
unicode\u code=“\\u”+十六进制\u字符串
结果+=unicode_码
返回结果
get\u unicode\u 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

如果您希望它是
字节
而不是
str
,您可以简单地去掉
.decode('ascii')

,我个人会将该函数写成
def get\u unicode\u code(text):result=''。join(char If ord(char)<128 else'\\u'+format(ord(char(char),'x')表示文本中的char格式)
@JonathanHartley感谢您更正了我的代码,使之更具Python风格。此函数返回的结果与Dean的最后一行相同。encode('unicode-escape')。decode('ascii')我更正了括号错误,并添加了一些代码以使函数具有所需的结果。这里的格式是将int转换为十六进制值,然后使用十六进制值手动生成unicodeThanks,我现在就知道了!
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