gpt4 book ai didi

python - 将 string.decode ('utf8' ) 从 python2 转换为 python3

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:31 25 4
gpt4 key购买 nike

我正在将一些代码从 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']

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

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

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

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

感谢您的帮助。

最佳答案

这称为“unicode-escape”编码。这是一个如何在 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 而不是 str,你可以简单地去掉 .decode('ascii')

关于python - 将 string.decode ('utf8' ) 从 python2 转换为 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38331819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com