Как получить Unicode / шестнадцатеричное представление символа из HTML, используя JavaScript / jQuery? - PullRequest
16 голосов
/ 10 июля 2011

Скажи, что у меня есть такой элемент ...

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

Есть ли способ получить значение unicode / hex альфа α, &#x03B1, используя JavaScript / jQuery? Что-то вроде ...

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

Мне нужно &#x03B1 вместо α, и кажется, что в любое время я вставляю &#x03B1 в DOM и сразу пытаюсь получить его, он отображается и я не могу вернуть &#x03B1; Я просто получаю α.

Ответы [ 4 ]

22 голосов
/ 10 июля 2011

Используя в основном простой 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/

14 голосов
/ 10 июля 2011

charCodeAt получит десятичное значение строки:

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

toString получит шестнадцатеричную строку

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

(подтверждено для работы в IE9 и Chrome)

9 голосов
/ 09 июня 2016

Если вы попытаетесь преобразовать символ Unicode из BMP (базовая многоязычная плоскость) указанными выше способами - вас ждет неприятный сюрприз.Символы из 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-шестнадцатеричные коды.

Надеюсь, это сэкономит вам время.

0 голосов
/ 22 апреля 2016

Например, если вам нужно преобразовать этот шестнадцатеричный код в Unicode

e68891e4bda0e4bb96

  1. выбрать два символа время от времени,
  2. если код dec asciiболее 127, добавить% до
  3. возвращаемая строка декодирования URL

    function hex2a (hex) {var str = '';для (var i = 0; i <шестнадцатеричная длина; i + = 2) {</p>

        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);
    

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...