web-dev-qa-db-ja.com

文字列をUnicode文字に変換するにはどうすればよいですか?

Javascriptで'\uXXXX'はUnicode文字で返されます。しかし、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: "™"
33
Harmen

String.fromCharCode() を使用します:String.fromCharCode(parseInt(input,16))\uを使用して文字列にUnicode値を挿入すると、16進値として解釈されるため、parseIntを使用する場合はベース(16)を指定する必要があります。

32
Digital Plane

String.fromCharCode("0x" + input)

または

String.fromCharCode(parseInt(input, 16))は16ビットの数値であるため(UTF-16)

14
Raynos

JavaScriptは内部的にUCS-2を使用します。

したがって、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'
10
Mathias Bynens

ES5以降では使用できます

String.fromCodePoint(number)

0xFFFFより大きいUnicode値を取得します。

したがって、すべての新しいブラウザで、次のように記述できます。

var input = '2122';
console.log(String.fromCodePoint(input));

または、16進数の場合:

var input = '2122';
console.log(String.fromCodePoint(parseInt(input, 16)));

より詳しい情報:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint

1
Adriano
var hex = '2122';
var char = unescape('%u' + hex);

console.log(char);

「™」を返します

0
Sonny Piers