如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?

Posted

技术标签:

【中文标题】如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?【英文标题】:How do I get the unicode/hex representation of a symbol out of the HTML using JavaScript/jQuery? 【发布时间】:2011-10-02 03:47:15 【问题描述】:

假设我有一个这样的元素...

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mo class="symbol">α</mo>
</math>

有没有办法使用 javascript/jQuery 获取 alpha α&amp;#x03B1 的 unicode/hex 值?有点像...

$('.symbol').text().unicode(); // I know unicode() doesn't exist
$('.symbol').text().hex(); // I know hex() doesn't exist

我需要&amp;#x03B1 而不是α,似乎每当我将&amp;#x03B1 插入DOM 并尝试立即检索它时,它都会被渲染,我无法找回&amp;#x03B1;我只是得到α。

【问题讨论】:

【参考方案1】:

如果您尝试以上述方式将 Unicode 字符从 BMP (basic multilingual plane) 转换出来 - 您会大吃一惊。 BMP 之外的字符被编码为多个UTF16 值,例如:

"?".length = 2(卸扣一份,锁座一份:)

所以"?".charCodeAt(0) 会给你55357,这只是数字的“一半”,而"?".charCodeAt(1) 会给你56594,这是另一半。

要获取您可能想要使用的这些值的字符代码,请使用以下字符串扩展函数

String.prototype.charCodeUTF32 = function()   
    return ((((this.charCodeAt(0)-0xD800)*0x400) + (this.charCodeAt(1)-0xDC00) + 0x10000));
;

你也可以这样使用

"&#x"+("?".charCodeUTF32()).toString(16)+";"

获取 html 十六进制代码。

希望这可以为您节省一些时间。

【讨论】:

+1 感谢您将我们从地雷中拯救出来!检查字符的长度是我的关键。 很好的洞察力,并注意不仅仅是表情符号超出了 BMP :) 您的原型增强可能应该首先检查长度;对于“UTF-8”字符串,this.charCodeAt(1) 返回NaN,因此整个函数也将如此;对于“length === 2”字符,它应该只返回charCodeAt(0)【参考方案2】:

例如,如果您需要将此十六进制代码转换为 unicode

e68891e4bda0e4bb96

    按时间选择两个字符, 如果 dec ascii 码超过 127 ,则在前面加一个 %

    返回url解码字符串

    函数 hex2a(hex) var str = ''; for (var i = 0; i

        var dec = parseInt(hex.substr(i, 2), 16);
        character = String.fromCharCode(dec);
    
    
        if (dec > 127)
            character = "%"+hex.substr(i,2);
    
        str += character;
    
    
    
    return decodeURI(str);
    

【讨论】:

【参考方案3】:

charCodeAt 将为您获取字符串的十进制值:

"α".charCodeAt(0); //returns 945
0x03b1 === 945; //returns true

toString 然后会得到十六进制字符串

(945).toString(16); // returns "3b1"

(已确认可在 IE9 和 Chrome 中运行)

【讨论】:

【参考方案4】:

主要使用纯 JavaScript,您应该能够做到:

function entityForSymbolInContainer(selector) 
    var code = $(selector).text().charCodeAt(0);
    var codeHex = code.toString(16).toUpperCase();
    while (codeHex.length < 4) 
        codeHex = "0" + codeHex;
    

    return "&#x" + codeHex + ";";

这是一个例子:http://jsfiddle.net/btWur/

【讨论】:

@aroth...这看起来棒极了!我现在正在测试

以上是关于如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?

如何使用 javascript/jquery 从 URL 中删除获取变量和文件名?

如何从 .cs 文件 (C#) 调用 JavaScript/jQuery 函数

使用 Javascript/jquery 如何从选定行中的每个单元格获取值

如何使用 JavaScript/jQuery 从 ASP.NET Web 窗体的 GridView 内部同时上传多个文件?

如何使用 javascript / jQuery 获取数据 ajax api 数组?