将Unicode字符转换为字符串格式

42
有人知道如何在javascript中将Unicode转换为字符串吗?例如:

\u2211 -> ∑ \u0032 -> 2 \u222B -> ∫

我想能够在xhtml或html中显示该符号。我还没有决定要使用哪种标记语言。

10
'\u2211' === '∑' 的意思是“Unicode 编码 \u2211 表示的字符与符号 ∑ 是等价的”。 - Blender
我认为这种转换是一种安全措施,可以从输入字符串中过滤出恶意标签。在这种情况下,应该重复应用这种转换,直到没有UNICODE转义字符为止。 - Juan Lanus
6个回答

72

k.ken 回复中的一个函数:

function unicodeToChar(text) {
   return text.replace(/\\u[\dA-F]{4}/gi, 
          function (match) {
               return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
          });
}

将输入字符串中的所有Unicode字符取出,并将它们转换为字符。


在添加 a-f 和使用不区分大小写的全局搜索 /gi 之间是否存在性能差异? - user4322543
不确定。@fuzzyhedge,你知道可靠测试正则表达式性能的方法吗?如果加上a-f,它肯定会起作用。 - Bryan Rayner
1
我不确定它有多可靠,但我在jsfiddle上进行了一个简单的测试这里。显式调用小写字符而不是忽略大小写标志大约快1%,这似乎是合理的。虽然顺序可能很重要。 - user4322543

31

刚刚找到一种方法: String.fromCharCode(parseInt(unicode,16))会返回正确的符号表示。这里的unicode没有在前面添加\u,只有数字。


15

要将给定的Unicode字符(例如)转换为字符串表示形式,您也可以使用以下一行代码:

var unicodeToStr = ''.codePointAt(0).toString(16)

上面的示例给出了 'F21D'。与 fontAwesome 一起使用,您将获得街景图标:'\F21D'


5

另一种方法:

const unicodeText = "F1A3";
let unicodeChar = JSON.parse(`["\\u${unicodeText}"]`)[0];

在我的React Native项目中非常好用!非常感谢您。 :) - Zhong Ri
2
如果普通字符串具有Unicode,它将不起作用。例如:"doesn't works" - Naren
1
太棒了!这个方法适用于包含一些Unicode字符的较长字符串。例如:'Tom \u0026 Jerry' -> 'Tom & Jerry'。虽然Bryan的答案也可以实现这个功能,但需要定义一个函数,而你的答案是一个优雅的单行代码。请注意:const string = "Tom \u0026 Jerry"; console.log( JSON.parse(`["${string}"]`)[0] ); // output: Tom & Jerry - ADTC
这对于像表情符号这样的代理对会失败。 - snnsnn

2
var string = '/0004';  // One of unicode
var unicodeToStr = string.codePointAt(0).toString(16)

0

// This outputs Grinning Face `U+1F600`:
// https://www.compart.com/en/unicode/U+1f600
const code = "".trim().codePointAt(0).toString(16);
console.log(code); // 1f600

// Convert it back to string
const str = "\u{1f600}";
const str2 = String.fromCodePoint(0x1f600);

console.log( str, str2, ''.normalize() === str.normalize());

参考资料:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接