Python中如何将中文转换为HTML实体编码(如你好)?

null
Python中如何将中文转换为HTML实体编码(如你好)?

7 回复

没说要 html encode 吗, 那这样吧
<br>';'.join(['&amp;#%04x' % ord(c) for c in "你好啊".decode("utf8")])<br>


import re

def chinese_to_html_entities(text):
    """
    将字符串中的中文字符转换为HTML实体编码(十进制格式)
    
    参数:
        text: 包含中文的字符串
        
    返回:
        转换后的字符串,中文字符被替换为&#xxxxx;格式
    """
    def convert_char(match):
        char = match.group()
        # 获取字符的Unicode码点(十进制)
        code_point = ord(char)
        # 格式化为&#十进制;的形式
        return f"&#{code_point};"
    
    # 匹配所有中文字符(Unicode范围:\u4e00-\u9fff)
    pattern = re.compile(r'[\u4e00-\u9fff]')
    
    # 替换所有匹配的中文字符
    return pattern.sub(convert_char, text)

# 使用示例
if __name__ == "__main__":
    # 测试字符串
    test_text = "你好,世界!Hello World!"
    
    # 转换
    result = chinese_to_html_entities(test_text)
    
    print("原始文本:", test_text)
    print("转换结果:", result)
    print("浏览器显示效果:", "(复制到HTML中查看)")
    
    # 验证:创建简单的HTML文件查看效果
    html_content = f"""
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>中文转HTML实体测试</title>
    </head>
    <body>
        <p>转换结果:{result}</p>
        <p>原始文本:{test_text}</p>
    </body>
    </html>
    """
    
    with open("test_output.html", "w", encoding="utf-8") as f:
        f.write(html_content)
    print("已生成 test_output.html 文件用于验证")

代码说明:

  1. 核心函数chinese_to_html_entities() 使用正则表达式匹配所有中文字符
  2. 匹配范围[\u4e00-\u9fff] 覆盖基本的中文字符范围
  3. 转换逻辑:对每个匹配的中文字符,用 ord() 获取其Unicode码点(十进制),然后格式化为 &#十进制; 的形式
  4. 保留非中文:英文、数字、标点等非中文字符保持不变

其他格式变体:

如果需要十六进制格式(&#xXXXX;),只需修改转换函数:

def chinese_to_html_entities_hex(text):
    def convert_char(match):
        char = match.group()
        # 获取十六进制表示,去掉0x前缀,大写
        hex_code = hex(ord(char))[2:].upper()
        return f"&#x{hex_code};"
    
    pattern = re.compile(r'[\u4e00-\u9fff]')
    return pattern.sub(convert_char, text)

# 使用
text = "你好"
print(chinese_to_html_entities_hex(text))  # 输出:&#x4F60;&#x597D;

一句话总结:用正则匹配中文,ord()取码点,格式化成&#十进制;格式。

仔细一看少了个 x 呀
’;’.join([’&#x%04x’ % ord© for c in “你好啊”.decode(“utf8”)])

O(∩_∩)O 谢谢大神

>>> import html.parser
>>> h = html.parser.HTMLParser()
>>> s = h.unescape(’&copy; 2010’)
>>> s
u’\xa9 2010’
>>> print s
© 2010
>>> s = h.unescape(’&#169; 2010’)
>>> s
u’\xa9 2010’


>>> ‘袈’.encode(“unicode-escape”)
b’\u8888’
>>> chr(int(‘8888’, 16))
‘袈’

>>> h.unescape(’&#9829;’)
‘♥’
>>> h.unescape(’&#x2665;’)
‘♥’
>>> h.unescape(’&hearts;’)
‘♥’
>>> ‘♥’.encode(“unicode-escape”)
b’\u2665’
>>> chr(int(‘2665’, 16))
‘♥’

>>> import html.entities as h
>>> h.name2codepoint[‘hearts’]
9829

>>> a=‘汉字먀니’.encode(‘utf-8’)
>>> b=re.findall(b’\xe4[\xb8-\xff][\x00-\xff]|[\xe5-\xe8][\x00-\xff][\x00-\xff]|\xe9[\x00-\xbe][\x00-\xff]’, a)
>>> b
[b’\xe6\xb1\x89’, b’\xe5\xad\x97’]

import html; html.unescape(’&#x4F60;&#x597D;&#x4F60;&#x597D;’) # ‘你好你好’

‘你好你好’.encode(“ascii”, errors=‘xmlcharrefreplace’).decode(“ascii”) # ‘&#20320;&#22909;&#20320;&#22909;’ # 10 进制, 上面的 &#x4F60;&#x597D;&#x4F60;&#x597D; 是 16 进制

html.unescape(’&#20320;&#22909;&#20320;&#22909;’) # ‘你好你好’

回到顶部