2011-08-15 211 views
23

使用Javascript '\uXXXX'以unicode字符返回。但是,如果XXXX部分是變量,我怎麼能得到一個Unicode字符?如何將字符串轉換爲unicode字符?

例如:

var input = '2122'; 
console.log('\\u' + input);    // returns a string: "\u2122" 
console.log(new String('\\u' + input)); // returns a string: "\u2122" 

我能想到的,使其工作的唯一辦法,就是用eval;但我希望有一個更好的解決方案:

var input = '2122'; 
var char = '\\u' + input; 
console.log(eval("'" + char + "'")); // returns a character: "™" 

回答

23

使用String.fromCharCode()這樣的:String.fromCharCode(parseInt(input,16))。當您使用\u將Unicode值放入字符串中時,它將被解釋爲十六進制值,因此在使用parseInt時需要指定基準(16)。

+1

感謝您鏈接我'fromCharCode()',但這仍然無法轉換'2122'成商標標牌 – Harmen

+0

'parseInt函數(輸入,16)'似乎做的工作;) – Harmen

+0

@哈曼我編輯了這篇文章,但你打了我10秒。 –

13

String.fromCharCode("0x" + input)

String.fromCharCode(parseInt(input, 16)),因爲它們是16位數字(UTF-16)

7

JavaScript uses UCS-2 internally.

因此,String.fromCharCode(codePoint)不會爲補充Unicode字符工作。例如,如果codePoint1195580x1D306,對於''字符)。

如果你想創建一個基於非BMP Unicode代碼點的字符串,你可以使用Punycode.js的實用功能,UCS-2字符串和UTF-16代碼點之間進行轉換:

// `String.fromCharCode` replacement that doesn’t make you enter the surrogate halves separately 
punycode.ucs2.encode([0x1d306]); // '' 
punycode.ucs2.encode([119558]); // '' 
punycode.ucs2.encode([97, 98, 99]); // 'abc' 
0
var hex = '2122'; 
var char = unescape('%u' + hex); 

console.log(char); 

將返回「™」

相關問題