如何将字符串转换为unicode字符?

Har*_*men 33 javascript unicode

在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"
Run Code Online (Sandbox Code Playgroud)

我能想到让它发挥作用的唯一方法就是使用eval; 但我希望有更好的解决方案:

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

Dig*_*ane 32

使用方式String.fromCharCode()如下:String.fromCharCode(parseInt(input,16)).使用Unicode将Unicode值放入字符串时\u,会将其解释为十六进制值,因此在使用时需要指定base(16)parseInt.

  • 感谢您将我链接到“fromCharCode()”,但这仍然不会将“2122”转换为商标符号 (2认同)

Ray*_*nos 14

String.fromCharCode("0x" + input)

要么

String.fromCharCode(parseInt(input, 16)) 因为它们是16位数字(UTF-16)


Mat*_*ens 10

JavaScript在内部使用UCS-2.

因此,String.fromCharCode(codePoint)不适用于补充Unicode字符.例如,如果codePoint119558(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'
Run Code Online (Sandbox Code Playgroud)


Adr*_*ano 7

从 ES5 开始,您可以使用

String.fromCodePoint(number)

获得大于 0xFFFF 的 unicode 值。

所以,在每一个新的浏览器中,你都可以这样写:

var input = '2122';
console.log(String.fromCodePoint(input));
Run Code Online (Sandbox Code Playgroud)

或者如果它是一个十六进制数:

var input = '2122';
console.log(String.fromCodePoint(parseInt(input, 16)));
Run Code Online (Sandbox Code Playgroud)

更多信息:

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

编辑(2021):

fromCodePoint不仅用于更大的数字,还用于组合 Unicode 表情符号。例如,要画一只挥舞的手,你必须写:

String.fromCodePoint(0x1F44B);
Run Code Online (Sandbox Code Playgroud)

但是如果你想要一个带有肤色的挥手,你必须结合它:

String.fromCodePoint(0x1F44B, 0x1F3FC);
Run Code Online (Sandbox Code Playgroud)

将来(或从现在开始),您甚至可以组合 2 个表情符号来创建新的表情符号,例如心和火,以创建燃烧的心:

String.fromCodePoint(0x2764, 0xFE0F, 0x200D, 0x1F525);
Run Code Online (Sandbox Code Playgroud)

var input = '2122';
console.log(String.fromCodePoint(input));
Run Code Online (Sandbox Code Playgroud)