&#x开头的是什么编码呢???

本文深入探讨了HTML、XML等SGML语言中的转义序列,包括numeric character reference和character entity reference,讲解了这些序列在不同编码环境下的作用,并提供了Python处理&#X开头字符串的具体方法。

做爬虫的时候,拿到的页面有可能大面积出现类似这样的字符&#dddd;&#xhhhh;&#name; HTM,这些字符是HTMLL、XML 等 SGML 类语言的转义序列(escape sequence)。它们不是「编码」。

以 HTML 为例,这三种转义序列都称作 character reference:

  • 前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。
  • 后一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。
     

 

numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。

 

有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码,因为数字字符引用只用到ASCII字符集里的字符。所以,即使在gb2312编码的网页中,也可以用NCR显示埃及的象形文字了。

 

如何在python中处理&#X开头的字符串呢?

# coding=utf-8

def dec(a):

    # &#x  开头  解码  :  以 &# 或 &#x 开头的字符串叫做 NCR 字符

    # 通过 py2.x下的HTMLParser 或 py3.x下的html 的 unescape() 方法来转换成能看懂的中文字符

    aa = a.replace(';', '').replace('&#x', '\\u').encode('utf-8').decode('unicode_escape')

    print(aa)

`取其` 这种形式是 **HTML 实体编码**(也叫字符引用),用于在 HTML 中表示特殊字符或 Unicode 字符。我们来逐个分析: --- ### 一、解码 `取` 和 `其` 这种格式是 **十六进制的 HTML 实体**,格式为: `&#x` + **十六进制 Unicode 码点** + `;` #### 1. `取` - 十六进制 `53D6` 转成十进制是:21462 - 对应的 Unicode 字符是:**取** - 查证:Unicode 编码 U+53D6 就是汉字“取” #### 2. `其` - 十六进制 `5171` → 十进制:20849 - 对应的 Unicode 字符是:**其** - Unicode 编码 U+5176 是汉字“其” --- ### 所以: `取其` 解码后就是:**取其** 这通常出现在句子中,比如“取其精华,去其糟粕”中的开头两个字。 --- ### 在编程中如何解码? #### Python 示例:解码 HTML 实体 ```python import html encoded = "取其" decoded = html.unescape(encoded) print(decoded) # 输出:取其 ``` #### JavaScript 示例: ```javascript const encoded = "取其"; const decoded = document.createElement('textarea'); decoded.innerHTML = encoded; console.log(decoded.value); // 输出:取其 ``` --- ### 常见场景 - 网页内容为了防止解析错误或 XSS 攻击,会将中文或特殊字符转义为 HTML 实体。 - 后端返回的数据中包含此类编码,前端或爬虫需要解码才能显示正常文字。 --- ### 补充说明 - `&#x...;` 是十六进制写法 - `&#...;`(十进制)也可以,例如:`取` 也是“取” - 浏览器会自动解码这些实体,所以你在网页上看到的是“取其”,而不是乱码。 --- ### 总结 `取其` 是 HTML 中对汉字“取其”的 **十六进制实体编码表示**,常用于网页安全或数据传输中,可通过相应函数解码回原始文字。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值