Char to Hex в JavaScript - PullRequest
       16

Char to Hex в JavaScript

18 голосов
/ 26 апреля 2011

Может кто-нибудь подсказать мне, как конвертировать char в hex в javascript?

Например:

"/ 力 さ れ た デ ー タ は 範 囲 外 で

"\ u5165 \ u529B \ u3055 \ u308C \ u305F \ u30C7 \ u30FC \ u30BF \ u306F \ u7BC4 \ u56F2 \ u5916 \ u3067 \ u3059 \ u3002"

Этот сайт делает это

Однако я не могу понять это.

Любое предложение.

Спасибо, Сарбботтам

Ответы [ 3 ]

28 голосов
/ 26 апреля 2011

Вы можете перебирать символы и использовать функцию charCodeAt, чтобы получить их значения UTF-16, а затем построить строку с ними.

Вот некоторый код, который я создал, который намного лучше, чем код на сайте, на который вы ссылаетесь, и его должно быть легче понять:

function string_as_unicode_escape(input) {
    function pad_four(input) {
        var l = input.length;
        if (l == 0) return '0000';
        if (l == 1) return '000' + input;
        if (l == 2) return '00' + input;
        if (l == 3) return '0' + input;
        return input;
    }
    var output = '';
    for (var i = 0, l = input.length; i < l; i++)
        output += '\\u' + pad_four(input.charCodeAt(i).toString(16));
    return output;
}

Давайте разберемся с этим.

  1. string_as_unicode_escape принимает один аргумент, input, который является строкой.
  2. pad_four - это внутренняя функция, которая выполняет одну функцию; он дополняет строки начальными символами '0' до длины не менее четырех символов.
  3. Начните с определения output как пустой строки.
  4. Для каждого символа в строке добавьте \u к строке output. Возьмите значение UTF-16 символа с input.charCodeAt(i), затем преобразуйте его в шестнадцатеричную строку с .toString(16), затем добавьте его с начальными нулями, затем добавьте результат к строке output.
  5. Возвращает строку output.

Как прокомментировал Тим Даун, мы также можем добавить 0x10000 к значению charCodeAt и затем .slice(1) строку, полученную в результате вызова .toString(16), для достижения эффекта заполнения.

3 голосов
/ 20 апреля 2015
function string_as_unicode_escape(str){
    return str.split("").map(function(s){
        return "\\u"+("0000" + s.charCodeAt(0).toString(16)).slice(-4);
    }).join("");
}
0 голосов
/ 01 октября 2013

var hex = new Array ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' а», 'б', 'с', 'd', 'е', 'е'); * * тысяча один

    function stringEncode()
    {
        var x=document.getElementById("from_text");


        var preescape="" + x.value;
        var escaped="";

        var i=0;
        for(i=0;i<preescape.length;i++)
        {
            escaped=escaped+encodeChar(preescape.charAt(i));
        }

        //x=document.getElementById("to_text");

                    x.value=escaped;
        //alert("Codigo: "+escapeHtml(escaped));
        //document.getElementById('string_example').innerHTML="<b>String example with text</b><br/><br/>String s=\""+escapeHtml(escaped)+"\";<br/><br/>";
    }


    function escapeHtml(unsafe) {
       return unsafe
                .replace(/&/g, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;")
                .replace(/"/g, "&quot;")
                .replace(/'/g, "&#039;");
            }

            function encodeChar(original)
            {
                    var found=true;
                    var thecharchar=original.charAt(0);
                    var thechar=original.charCodeAt(0);
                    switch(thecharchar) {
                                    case '\n': return "\\n"; break; //newline
                                    case '\r': return "\\r"; break; //Carriage return
                                    case '\'': return "\\'"; break;
                                    case '"': return "\\\""; break;
                                    case '\\': return "\\\\"; break;
                                    case '\t': return "\\t"; break;
                                    case '\b': return "\\b"; break;
                                    case '\f': return "\\f"; break;

                                    default:
                                            found=false;
                                            break;
                            }
                            if(!found)
                            {
                                    if(thechar>127) {
                                            var c=thechar;
                                            var a4=c%16;
                                            c=Math.floor(c/16); 
                                            var a3=c%16;
                                            c=Math.floor(c/16);
                                            var a2=c%16;
                                            c=Math.floor(c/16);
                                            var a1=c%16;
                                    //  alert(a1);
                                            return "\\u"+hex[a1]+hex[a2]+hex[a3]+hex[a4]+"";        
                                    }
                                    else
                                    {
                                            return original;
                                    }
                            }


            }

// ------------------------ lo llamarias con

...