2011-04-26 11 views
18

Czy ktoś mógłby mi pomóc, jak konwertować char na hex w javascript?

Na przykład:Char do Hex w javascript

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

This site does it

jednak nie mogę zrozumieć.

Wszelkie sugestie.

Dzięki Sarbbottam

Odpowiedz

28

Można pętli bohaterów i korzystać z funkcji charCodeAt, aby uzyskać ich wartości UTF-16, a następnie buduje ciąg z nich.

Oto niektóre kodu I skonstruowany, że jest znacznie lepiej niż kod na stronie masz ze sobą powiązane, a powinno być łatwiejsze do zrozumienia:

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

Złammy go w dół.

  1. string_as_unicode_escape przyjmuje jeden argument, input, który jest ciągiem znaków.
  2. pad_four to funkcja wewnętrzna, która wykonuje jedną rzecz; zawiera znaki z wiodącymi znakami '0', dopóki długość nie przekroczy czterech znaków.
  3. Zacznij od zdefiniowania output jako pustego ciągu.
  4. Dla każdego znaku w ciągu, dołącz \u do ciągu output. Przyjmij wartość UTF-16 postaci za pomocą input.charCodeAt(i), a następnie przekonwertuj ją na szesnastkowy ciąg znaków przy pomocy .toString(16), a następnie wypełnij ją wiodącymi zerami, a następnie dołącz wynik do ciągu output.
  5. Zwróć ciąg znaków output.

Jak skomentował Tim dół, możemy również dodać 0x10000 wartości charCodeAt a następnie .slice(1) ciąg wynikające z wywołaniem .toString(16), aby osiągnąć efekt dopełnienia.

+0

Dziękuję bardzo. - Sarbbottam – user626818

+5

Możesz zgubić kod wypełniający za pomocą następującej sztuczki: 'output + = '\\ u' + (input.charCodeAt (i) + 0x10000) .toString (16) .slice (1);' –

+0

To jest bardzo sprytnie;) –

0

var hex = new Array ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 'Alfabet');

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(""); 
}