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

如题所述

第1个回答  2022-06-05

在使用readability的api提取网页内容的时候 点这里看-readability-网页内容提取利器 ,中文内容都是 &#x 开头的一堆乱码似的东西。但保存成网页文件后,浏览器是可以正常显示的~

故搜索了一下,知乎上有个 回答 挺好,在此转一下:

形如

的一串字符是 HTML、XML 等 SGML 类语言的转义序列(escape sequence)。 它们不是「编码」 。以 HTML 为例,这三种转义序列都称作 character reference:第一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。
后两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。

从 HTML 4 开始,NCR 以 Unicode 为准,与文档编码无关。「中国」二字分别是 Unicode 字符 U+4E2D 和 U+56FD,十六进制表示的 code point 数值「4E2D」和「56FD」就是十进制的「20013」和「22269」。所以

这两种 NCR 写法都会在显示时转换为「中国」二字。NCR 可以用于转义任何 Unicode 字符,而 character entity reference 很受限,参见 HTML 4 和 HTML5 中已有定义的字符列表:
Character entity references in HTML 4
Character entity references in HTML5

另外可以参考这篇文章 使用 &#x 3000 等空格实现最小成本中文对齐

知道了是什么,现在来看怎么把它转回成中文呢?
Python实现

要将16进制字符转成中文可以用如下方法

故需要将 &#xhhhh; 做替换,再用上面的方式进行转换。对于特殊符号(如加减乘除),会显示为 &#xhh ,后面只有两位,在转换之前,需要提前补全。具体可参看 readability-网页内容提取利器

Java实现

补充:
后来想到,其实可以把这当成html来解析啊,然后就有了: