Подтвердить что ты не робот

Как получить представление unicode/hex символа из HTML с помощью JavaScript/jQuery?

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

<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 назад; Я просто получаю α.

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

(Подтверждено работать в IE9 и Chrome)

Ответ 3

Если вы попытаетесь преобразовать символ Unicode из BMP (базовый многоязычный самолет) выше, вы готовы к неприятному удивлению. Символы из BMP кодируются как несколько значений UTF16, например:

"🔒".length= 2 (одна часть для скобы одна часть для основания замка:))

поэтому "🔒".charCodeAt(0) даст вам 55357, который является только "половиной" числа, а "🔒".charCodeAt(1) даст вам 56594, который является второй половиной.

Чтобы получить коды char для этих значений, вы можете использовать использование следующей функции расширения строки

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

вы также можете использовать его как

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

чтобы получить html шестнадцатеричные коды.

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

Ответ 4

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

e68891e4bda0e4bb96

  • выберите два символа по времени,
  • если код dec ascii превышает 127, добавьте% before
  • return url decode string

    Функция hex2a (hex) {   var str = '';   для (var я = 0; я < hex.length; я + = 2) {

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

    }