[英]How can I convert a string into a unicode character?
在 Javascript 中'\\uXXXX'
以 unicode 字符返回。 但是当XXXX
部分是一个变量时,我怎样才能得到一个 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: "™"
像这样使用String.fromCharCode()
: String.fromCharCode(parseInt(input,16))
。 当您使用
\\u\u003c/code>将 Unicode 值放入字符串时,它会被解释为十六进制值,因此您需要在使用
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));
或者如果它是一个十六进制数:
var input = '2122';
console.log(String.fromCodePoint(parseInt(input, 16)));
更多信息:
var hex = '2122';
var char = unescape('%u' + hex);
console.log(char);
将返回“™”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.