猿问

在将字符串传递给 encodeURIComponent() 之前从字符串中排除字符

如果字符串包含间隔中的字符U+D800..U+DFFF,则encodeURIComponent()抛出malformed URI sequence错误。我想在将给定字符串传递给encodeURIComponent(). 怎么做?

示例:我有一个以 UTF-16BE 编码的文本文件,其中包含以下六进制字符:

D7FF D800 D801 ... DFFE DFFF E000

我正在搜索一个从上面的字符串返回这个字符串的函数:

D7FF E000

因此只保留有效的 Unicode 字符。


慕斯709654
浏览 91回答 1
1回答

千万里不及你

您可以使用replace/encodeURIComponent组合来获得所需的结果。您首先需要使用此正则表达式匹配所有不属于 unicode 范围的字符[0xD800..0xDFFF]:/[^\uD800-\uDFFF]+/g然后用它们的编码版本替换它们:let result = string.replace(/[^\uD800-\uDFFF]+/g, match => encodeURIComponent(match));例子:let string = "/foo/\uD7FF\uD800\uD801/bar";let result = string.replace(/[^\uD800-\uDFFF]+/g, match => encodeURIComponent(match));console.log(result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答