【问题标题】:Can hexadecimal html be systematically converted to unicode via Javascript? [duplicate]可以通过Javascript系统地将十六进制html转换为unicode吗? [复制]
【发布时间】:2013-04-30 07:41:17
【问题描述】:

例如,我有以下字符串:

“嗨,我正在测试一个奇怪的字符 Ů,它是一个带圆圈的 U”

现在我的字符串使用 html 代码Ů 来显示 U 形圆。但是,我需要它采用 unicode 格式,即。 \u016E。有没有什么好的系统方法可以用普通的 javascript 做到这一点?

【问题讨论】:

  • 什么是“Unicode 格式”?你的意思是U+016E 或它的Javascript 等价物\u016E?或者只是 HTML 文件使用的编码(即字符本身)?顺便说一句,Ů不是十六进制。
  • 上面链接的问题的答案的问题是,除非您在浏览器中,否则它们都没有解决解码数字实体的问题。
  • @MrLister 没错,JavaScript 等价于 \u016E

标签: javascript regex unicode hex


【解决方案1】:

如果要将数字 HTML 字符引用转换为 Unicode 转义序列,请尝试以下操作(不适用于 0xFFFF 以上的代码点):

function convertCharRefs(string) {
    return string
        .replace(/&#(\d+);/g, function(match, num) {
            var hex = parseInt(num).toString(16);
            while (hex.length < 4) hex = '0' + hex;
            return "\\u" + hex;
        })
        .replace(/&#x([A-Za-z0-9]+);/g, function(match, hex) {
            while (hex.length < 4) hex = '0' + hex;
            return "\\u" + hex;
        });
}

如果你只是想解码字符引用:

function decodeCharRefs(string) {
    return string
        .replace(/&#(\d+);/g, function(match, num) {
            return String.fromCodePoint(num);
        })
        .replace(/&#x([A-Za-z0-9]+);/g, function(match, num) {
            return String.fromCodePoint(parseInt(num, 16));
        });
}

两个函数都使用 String.replace 和一个函数作为替换。

【讨论】:

  • [A-Fa-f0-9] 不应该足够吗?
  • @changed 是的,请随时编辑我的答案。
猜你喜欢
  • 2020-05-19
  • 2020-02-06
  • 2012-10-28
  • 2021-04-30
  • 1970-01-01
  • 2015-11-11
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多