繁体   English   中英

在javascript中将字符转换为十六进制

[英]Char to Hex in javascript

谁能指导我如何在 javascript 中将 char 转换为十六进制?

例如:

“入力されたデータは范囲外です。”

“\入\力\さ\れ\た\デ\ー\タ\は\範\囲\外\で\す\。”

这个网站做到了

但是我想不通。

任何建议。

谢谢,萨博坦

您可以遍历字符并使用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\u003c/code>附加到output字符串。 使用input.charCodeAt(i)获取字符的 UTF-16 值,然后使用.toString(16)将其转换为十六进制字符串,然后用前导零填充它,然后将结果附加到output字符串。
  5. 返回output字符串。

正如 Tim Down 所评论的,我们还可以将0x10000添加到charCodeAt值中,然后将.slice(1)调用.toString(16)产生的字符串,以实现填充效果。

function string_as_unicode_escape(str){
    return str.split("").map(function(s){
        return "\\u"+("0000" + s.charCodeAt(0).toString(16)).slice(-4);
    }).join("");
}

var hex=new Array('0','1','2','3','4','5','6','7','8','9','a', 'b','c','d','e','f');

    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 lamarias con

您可以为此使用普通的replace()

'! \u0100 力 😃'.replace(
    /[^\x00-\xFF]/g,
    function(ch) {
        return ('\\u0' + ch.charCodeAt(0).toString(16))
            .replace(/0(?=....$)/, '');
    }
)

产生! \Ā \力 \?\? ! \Ā \力 \?\?

令人难以置信的简洁,并且处理填充问题而不会麻烦if s 或 slow slice() s。
map()不同,适用于所有浏览器
请注意它如何仅替换您需要的字符 ( !未受影响)没有繁琐的迭代或缓慢的split() ing。
就像其他答案一样,它也能正确处理代理对( 😃变成了两个字节\?\? )。

如果您计划多次重用该函数,将它放在自己的函数中并保持两个正则表达式静态也会使其更快。

如果确实需要,您可以通过将[^\\x00-\\xFF]更改为. , \\\\u0\u003c/code>到\\\\u000\u003c/code> , 和/0(/0+( .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM