任何人都可以指導我如何字符爲十六進制轉換在JavaScript
例如:?字符以十六進制在JavaScript
「輸入數據超出範圍」
到
「 \ u5165 \ u529B \ u3055 \ u308C \ u305F \ u30C7 \ u30FC \ u30BF \ u306F \ u7BC4 \ u56F2 \ u5916 \ u3067 \ u3059 \ u3002「
但我不能弄明白。
任何建議。
感謝,Sarbbottam
任何人都可以指導我如何字符爲十六進制轉換在JavaScript
例如:?字符以十六進制在JavaScript
「輸入數據超出範圍」
到
「 \ u5165 \ u529B \ u3055 \ u308C \ u305F \ u30C7 \ u30FC \ u30BF \ u306F \ u7BC4 \ u56F2 \ u5916 \ u3067 \ u3059 \ u3002「
但我不能弄明白。
任何建議。
感謝,Sarbbottam
可以遍歷的特點和使用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;
}
。
讓我們把它分解
string_as_unicode_escape
有一個參數,input
,這是一個字符串pad_four
是一個內部函數,做一件事情;.它墊串與領先'0'
字符,直到長度爲至少四個字符長。output
作爲空字符串開始關閉。\u
到output
字符串。取UTF-16 input.charCodeAt(i)
字符的值,然後將其轉換爲十六進制字符串.toString(16)
,然後用前導零填充它,然後將結果追加到output
字符串。output
字符串。作爲添唐氏評論的,我們也可以添加0x10000
到charCodeAt
值,然後.slice(1)
從主叫.toString(16)
,以達到填充效果所產生的字符串。
變種十六進制=新的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, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
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
function string_as_unicode_escape(str){
return str.split("").map(function(s){
return "\\u"+("0000" + s.charCodeAt(0).toString(16)).slice(-4);
}).join("");
}
非常感謝你 - 。Sarbbottam – user626818 2011-04-26 07:30:25
你可以用下面的技巧失去填充代碼:'輸出+ = '\\ U' +(input.charCodeAt(我)+ 0x10000處)的ToString(16).slice(1);' – 2011-04-26 08:33:44
這的確非常聰明; ) – 2011-04-26 08:39:40