Node.js 汉字的URLDecode
Node.js 汉字的URLDecode
找了好多资料,没发现如何通过Node.js来Decode汉字,比如这个字符单
,通过常见的网页URLDecode工具就能编译成汉字,有朋友知道
Node.js里如何做到吗?多谢!
Node.js 汉字的URLDecode
在Node.js中处理URL编码(包括对汉字进行解码)是一个常见的需求。通常情况下,URL编码会将特殊字符转换为百分号(%)后跟两位十六进制数的形式。然而,在某些场景下,你可能会遇到类似单
这样的Unicode字符,这种形式需要先转换为UTF-8编码再进行解码。
示例代码
我们可以使用Node.js内置的decodeURIComponent
函数来处理标准的URL编码。但针对像单
这样的Unicode字符,我们需要额外的步骤将其转换为对应的UTF-8字符串。
function decodeUnicode(str) {
return str.replace(/&#x([0-9A-Fa-f]+);/g, function(match, p1) {
return String.fromCharCode(parseInt(p1, 16));
});
}
// 示例
const encodedString = "这是测试字符串单";
const decodedString = decodeURIComponent(encodedString.replace(/&#x([0-9A-Fa-f]+);/g, '%u$1'));
console.log(decodedString);
在这个例子中,我们首先定义了一个decodeUnicode
函数,它接受一个字符串并替换所有形如&#x...;
的Unicode字符,将其转换为对应的UTF-8字符。
然后,我们使用decodeURIComponent
函数对剩余的URL编码部分进行解码。为了兼容decodeURIComponent
,我们将Unicode字符转换为%u
加上十六进制值的形式。
解释
- 正则表达式:
/&#x([0-9A-Fa-f]+);/g
匹配所有以&#x
开头,以;
结尾,并且中间包含十六进制数字的模式。 - 替换函数:
String.fromCharCode(parseInt(p1, 16))
将匹配到的十六进制数字转换为对应的UTF-8字符。 - 解码:
decodeURIComponent
用于解码标准的URL编码。
这种方法可以有效地处理包含Unicode字符的URL编码字符串。希望这对你有所帮助!
单
是字符实体引用,在nodejs中把它当成一个字来考虑就行,不需要解码,输出到html它自己能显示。
如果一定要把它解码成汉字,可以用String.fromCharCode()
方法。
注意x5355是16进制表示法,需要先转换成10进制再用String.fromCharCode()
。
我写过一个包。
true-html-escaper
可直接 npm install
感谢大家!
你肯定永cheerio了吧 cheerio 解析的时候传入个配置也可以 heerio.load(body, { decodeEntities: false });
在Node.js中,处理URL编码(包括包含汉字的URL编码)可以使用内置的querystring
模块或者decodeURIComponent
函数。对于你提到的单
这种形式的编码,实际上并不是标准的URL编码格式,而是一种HTML实体编码。我们可以先将其转换为实际的UTF-8字符。
以下是一个简单的示例代码,演示如何将HTML实体编码的汉字解码为实际的UTF-8字符:
function decodeHtmlEntity(entity) {
return entity.replace(/&#x([0-9a-fA-F]+);/g, function(match, p1) {
return String.fromCharCode(parseInt(p1, 16));
});
}
const encodedText = '单';
const decodedText = decodeHtmlEntity(encodedText);
console.log(decodedText); // 输出: 单
在这个例子中,我们定义了一个decodeHtmlEntity
函数,它接受一个包含HTML实体编码的字符串,并使用正则表达式来匹配这些编码。对于每个匹配到的HTML实体编码,我们使用String.fromCharCode
函数将其转换为对应的UTF-8字符。
如果你需要处理的是标准的URL编码(如%E5%8D%95
),你可以直接使用decodeURIComponent
函数:
const urlEncodedText = '%E5%8D%95';
const decodedText = decodeURIComponent(urlEncodedText);
console.log(decodedText); // 输出: 单
以上代码展示了如何在Node.js中处理不同的编码方式。希望这能解决你的问题!