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

时间:2011-08-15 09:04:27

标签: 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"

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

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

5 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分:14)

String.fromCharCode("0x" + input)

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

答案 2 :(得分:10)

JavaScript uses UCS-2 internally.

因此,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'

答案 3 :(得分:1)

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

console.log(char);

将返回“™”

答案 4 :(得分:1)

从ES5开始,您可以使用

  

String.fromCodePoint(数字)

获取大于0xFFFF的unicode值。

因此,在每个新的浏览器中,您都可以通过以下方式编写它:

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

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

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

更多信息:

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