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: "™"
String.fromCharCode()
を使用します:String.fromCharCode(parseInt(input,16))
。 \u
を使用して文字列にUnicode値を挿入すると、16進値として解釈されるため、parseInt
を使用する場合はベース(16)を指定する必要があります。
String.fromCharCode("0x" + input)
または
String.fromCharCode(parseInt(input, 16))
は16ビットの数値であるため(UTF-16)
したがって、String.fromCharCode(codePoint)
は、補助Unicode文字では機能しません。たとえば、codePoint
が119558
(0x1D306
、'????'
文字の場合)の場合。
非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'
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)));
より詳しい情報:
var hex = '2122';
var char = unescape('%u' + hex);
console.log(char);
「™」を返します