gpt4 book ai didi

python - 将 UTF-8 字符串转换为 XML/HTML 字符串时出现问题

转载 作者:行者123 更新时间:2023-12-01 06:24:49 24 4
gpt4 key购买 nike

我有一个以 UTF-8 编码的字符串,我正在尝试在网页上显示该文本。我注意到,将任何特殊字符转换为 XML 编码字符的任何尝试都失败了。我知道我做错了什么,但我不知道如何改正。

Edit: The original question only showed the following string as one without the b prefix, without paying any attention to the conversion with str(). Below is the updated conversion process that was not shown.

这是我正在使用的示例字符串,其末尾有一个水平省略号:

>>> html = b'<p>Lorem ipsum dolor sit amet\\xe2\\x80\\xa6</p>'
>>> html = str(html)

我的问题是 UTF-8 字符的长度是可变的,所以我不能这样做:

>>> import re
>>> re.sub(r'\\(x[a-f\d]{2})', r'&#\1;', html) # Don't do this!
'<p>Lorem ipsum dolor sit amet&#xe2;&#x80;&#xa6;</p>'

这给出了三个完全有效的 UTF-8 扩展字符,但不是正确的编码。就我而言,我可以简单地执行以下操作:

>>> re.sub(r'\\xe2\\x80\\xa6', '&hellip;', html)
'<p>Lorem ipsum dolor sit amet&hellip;</p>'

但这仅涵盖多种字符编码中的一种。我显然没有时间、耐心或任何意图为每个字符编写替换内容。

所以,我的问题是:如何知道字符的字节长度?是否有一些字节掩码可以用来判断一个字节是字符的第一个字节还是最后一个字节?欢迎使用任何其他确定长度的方法或可以为我完成此操作的模块。

最佳答案

html 正在以 UTF8 编码形式接收 bytes 。这些字节可以转换为 str通过像这样解码它们:

html = bytes_string.decode('utf-8')

或者像这样

html = str(bytes_string, 'utf-8')

执行 str(bytes_string) 不会解码字节,它将返回 repr字节数。

解码后,可以使用 html.entities 中的数据将字符转换为等效的 html 实体。标准库中的模块,以及str.translate .

from html import entities                                                                                                                                                  

# If we don;t want to convert html tags, don't include
# '<' and '>' in the translation table.
skip = {ord(x) for x in '<>'}
trans_table = {k: '&{};'.format(v)
for k, v in entities.codepoint2name.items() if k not in skip}

translated = s.translate(trans_table)
print(translated)

输出

<p>Lorem ipsum dolor sit amet&hellip;</p>

我在 this answer 中更深入地讨论了翻译的工作原理。 .

关于python - 将 UTF-8 字符串转换为 XML/HTML 字符串时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60217958/

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