当前位置:网站首页>&#x开头的是什么编码?
&#x开头的是什么编码?
2022-07-31 09:18:00 【会飞的胖达喵】
&#x开头的是什么编码?
在 Node 层利用 cheerio 解析网页时,输出的中文内容都是以 &#x 开头的一堆像乱码一样的东西,尝试过各种编码都无效,而且神奇的是,将这一堆“乱码”保存成网页后,通过浏览器打开又可以正常显示。这到底是什么??
缩减后的示例代码如下:
const cheerio = require('cheerio'); const $ = cheerio.load('<div id="content">你好</div>') console.log($('#content').html()) //你好
其实,上面那一堆乱码一样的东西,它的学名叫实体编码 entity code。
下面引用下知乎搜到的答案。
在 HTML 中,某些字符是预留的,例如小于号「<」、大于号「>」等,浏览器会将它们视作标签。如果想要在HTML中显示这些预留字符,我们就要用到字符实体(character entities)。我们比较熟悉的字符实体有空格「 」,小于号「<」,大于号「>」等。这样的格式比较语义化,容易记忆,但其实字符实体有其他的格式:
&name; &#dddd; &#xhhhh;
- 这三种转义方式都称作 character reference,第一种是 character entity reference,「&」符号后接预先定义好的 entity 名称。
- 后两种是 numeric character reference,数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,「&#x」开头的后接十六进制数字。
从 HTML4 开始,numeric character reference 以 Unicode 为准,与文档编码无关。「你好」二字分别是 Unicode 字符 U+4F60 和 U+597D,十六进制表示的 code point 数值「4F60」和「597D」,同时也就是十进制的「20320」和「22909」。所以
在HTML中输入
你好 你好
都会显示为“你好”。
知道原因后,那么如何解决上述的问题呢?
方法一:使用cheerio提供的属性
cheerio默认会对entity进行decode,我们只需要关闭该功能即可
const cheerio = require('cheerio'); const $ = cheerio.load('<div id="content">你好</div>', { decodeEntities: false }) console.log($('#content').html()) // 你好
方法二:手动decode
function decode(str) { // 一般可以先转换为标准 unicode 格式(有需要就添加:当返回的数据呈现太多\\\u 之类的时) str = unescape(str.replace(/\\u/g, "%u")); // 再对实体符进行转义 // 有 x 则表示是16进制,$1 就是匹配是否有 x,$2 就是匹配出的第二个括号捕获到的内容,将 $2 以对应进制表示转换 str = str.replace(/&#(x)?(\w+);/g, function($, $1, $2) { return String.fromCharCode(parseInt($2, $1? 16: 10)); }); return str; }
边栏推荐
- MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
- matlab常用符号用法总结
- 各位大佬,sqlserver 支持表名正则匹配吗
- How to restore data using mysql binlog
- Binary tree search and backtracking problem (leetcode)
- Kotlin入门介绍篇
- 优信年营收16亿:亏损3亿 已与蔚来资本及58集团签署股权协议
- js implements the 2020 New Year's Day countdown bulletin board
- HTC官方RUU固件提取刷机包rom.zip以及RUU解密教程
- 【职场杂谈】售前工程师岗位的理解杂谈
猜你喜欢
第二十三课,抗锯齿(Anti Aliasing)
(selenium)Service geckodriver unexpectedly exited. Status code was: 64
Andoird开发--指南针(基于手机传感器)
MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
SQLite3交叉编译
来n遍剑指--07. 重建二叉树
2019 NeurIPS | Graph Convolutional Policy Network for Goal-Directed Molecular Graph Generation
关于挂载EXfat文件格式U盘失败的问题
ARC在编译和运行做了什么?
Kotlin—基本语法(三)
随机推荐
服务器上解压文件时提示“gzip: stdin: not in gzip format,tar: Child returned status 1,tar: Error is not recovera“
科目三:左转弯
优信年营收16亿:亏损3亿 已与蔚来资本及58集团签署股权协议
JSP page对象简介说明
jupyter notebook初使用
OpenGL es 初识
作为面试官,关于线程池的问题我一般这样套路...
js空气质量aqi雷达图分析
JSP session的生命周期简介说明
如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南
A Spark SQL online problem troubleshooting and positioning
postgresql generate random date, random time
HTC官方RUU固件提取刷机包rom.zip以及RUU解密教程
JSP response,request操作中(中文乱码)-如何解决呢?
JSP pagecontext对象的简介说明
第八章 、接口
js radar chart statistical chart plugin
canvas粒子变幻各种形状js特效
I advise those juniors and juniors who have just started working: If you want to enter a big factory, you must master these core skills!Complete Learning Route!
spark filter