2011-04-26 73 views
18

Bất cứ ai có thể hướng dẫn tôi về cách chuyển đổi char thành hex trong javascript?

Ví dụ:Char to Hex trong javascript

"入 力 さ れ た デ ー タ は 範 囲 外 で す"
để
"\ u5165 \ u529B \ u3055 \ u308C \ u305F \ u30C7 \ u30FC \ u30BF \ u306F \ u7BC4 \ u56F2 \ u5916 \ u3067 \ u3059 \ u3002"

This site does it

Tuy nhiên tôi không thể hình dung nó ra.

Bất kỳ đề xuất nào.

Cảm ơn, Sarbbottam

Trả lời

28

Bạn lặp qua các nhân vật và có thể sử dụng chức năng charCodeAt để có được giá trị UTF-16 của họ, sau đó xây dựng một chuỗi với họ.

Dưới đây là một số mã tôi xây dựng đó là tốt hơn nhiều so với mã trên trang web mà bạn đã liên kết, và nên được dễ dàng hơn để hiểu:

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

Hãy phá vỡ nó xuống.

  1. string_as_unicode_escape lấy một đối số, input, là một chuỗi.
  2. pad_four là một hàm bên trong thực hiện một việc; nó đệm các chuỗi với các ký tự '0' hàng đầu cho đến khi độ dài tối thiểu là bốn ký tự.
  3. Bắt đầu bằng cách xác định output làm chuỗi rỗng.
  4. Đối với mỗi ký tự trong chuỗi, hãy thêm \u vào chuỗi output. Lấy giá trị UTF-16 của ký tự bằng input.charCodeAt(i), sau đó chuyển đổi nó thành chuỗi thập lục phân với .toString(16), sau đó đệm nó bằng số 0 đứng đầu, sau đó nối kết quả vào chuỗi output.
  5. Trả lại chuỗi output.

Như Tim Xuống nhận xét, chúng tôi cũng có thể thêm 0x10000 với giá trị charCodeAt và sau đó .slice(1) chuỗi kết quả từ gọi .toString(16), để đạt được hiệu ứng đệm.

+0

Thank you very much. - Sarbbottam – user626818

+5

Bạn có thể mất mã đệm bằng mẹo sau: 'output + = '\\ u' + (input.charCodeAt (i) + 0x10000) .toString (16) .slice (1);' –

+0

Điều đó rất thực sự thông minh;) –

0

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

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