在python3中将转义utf8字符串转换为utf

2024-10-02 16:34:40 发布

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

我有一个包含转义的utf-8序列的py3字符串,例如“Company\\fffffffc2\\ffffff ae”,我想将其转换为正确的utf 8字符串(在示例中,它将是“Company®”,因为转义序列是c2 ae)。我试过了

print (bytes("Company\\\\ffffffc2\\\\ffffffae".replace(
    "\\\\ffffff", "\\x"), "ascii").decode("utf-8"))

结果:Company\xc2\xae

^{pr2}$

结果:公司

(错了,因为chreacts是分开治疗的,但是它们应该一起治疗。在

如果是的话

print (b"Company\xc2\xae".decode("utf-8"))

它给出了正确的结果。 公司®

如何通过编程实现这一点(即从py3 str开始)


Tags: 字符串示例py3公司序列companyutfprint
1条回答
网友
1楼 · 发布于 2024-10-02 16:34:40

一个简单的解决方案是:

import ast

test_in = "Company\\\\ffffffc2\\\\ffffffae"
test_out = ast.literal_eval("b'''" + test_in.replace('\\\\ffffff','\\x') + "'''").decode('utf-8')
print(test_out)

但是,如果在输入字符串本身中有一个三引号''',那么它将失败。在


下面的代码没有这个问题,但是它不像第一个代码那么简单。在

第一步是在正则表达式上拆分字符串。奇数项是ascii部分,例如"Company";每个偶数项对应一个转义的utf8代码,例如"\\\\ffffffc2"。每个子字符串根据其在输入字符串中的含义转换为字节。最后,所有部分连接在一起,并从字节解码为字符串。在

^{pr2}$

代码可以优化。Ascii部分不需要编码/解码,连续的十六进制代码应该连接起来。在

相关问题 更多 >