2011-08-15 17 views
23

Javascriptで'\uXXXX'はユニコード文字で返します。しかし、XXXXの部分が変数の場合、どのようにしてユニコード文字を取得できますか?文字列をユニコード文字に変換するにはどうすればよいですか?

例えば:

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値を入力すると、16進数値として解釈されるため、parseIntを使用する場合はbase(16)を指定する必要があります。

+1

おかげで、これはまだ商標に '2122'を変換しませんが – Harmen

+0

'のparseInt(入力、16)は '仕事をするようで署名します;) – Harmen

+0

@Harmen私は投稿を編集しましたが、あなたは10秒で私を倒しました。 –

13

String.fromCharCode("0x" + input)

または

String.fromCharCode(parseInt(input, 16))彼らは16ビットの数値(UTF-16)

7

JavaScript uses UCS-2 internally.

あるとしてこのように、String.fromCharCode(codePoint)は補足Unicode文字のために動作しません。 codePoint119558(の場合は0x1D306)の場合。

あなたは非BMP Unicodeコードポイントに基づいて文字列を作成する場合は、UCS-2文字列とUTF-16コード・ポイントの間で変換することPunycode.jsのユーティリティ機能を使用することができます。

// `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); 

戻り、「™」 `fromCharCode()`に私をリンクするための

関連する問題