2011-04-26 62 views
18

任何人都可以指導我如何字符爲十六進制轉換在JavaScript

例如:?字符以十六進制在JavaScript

「輸入數據超出範圍」

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

This site does it

但我不能弄明白。

任何建議。

感謝,Sarbbottam

回答

28

可以遍歷的特點和使用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. 對於字符串中的每個字符,追加\uoutput字符串。取UTF-16 input.charCodeAt(i)字符的值,然後將其轉換爲十六進制字符串.toString(16),然後用前導零填充它,然後將結果追加到output字符串。
  5. 返回的output字符串。

作爲添唐氏評論的,我們也可以添加0x10000charCodeAt值,然後.slice(1)從主叫.toString(16),以達到填充效果所產生的字符串。

+0

非常感謝你 - 。Sarbbottam – user626818 2011-04-26 07:30:25

+5

你可以用下面的技巧失去填充代碼:'輸出+ = '\\ U' +(input.charCodeAt(我)+ 0x10000處)的ToString(16).slice(1);' – 2011-04-26 08:33:44

+0

這的確非常聰明; ) – 2011-04-26 08:39:40

0

變種十六進制=新的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(""); 
}