如何将unicode字符转换成相应的表情符号?
How to convert unicode characters into corresponding emojis?
我正在对我的数据执行类似 website 的操作。我有以下格式的 Unicode,将 UTF16 转换为 UTF 字符串的代码有效。
function decodeFBEmoji (fbString) {
// Convert String to Array of hex codes
const codeArray = (
fbString // starts as '\u00f0\u009f\u0098\u00a2'
.split('')
.map(char => (
char.charCodeAt(0) // convert '\u00f0' to 0xf0
)
); // result is [0xf0, 0x9f, 0x98, 0xa2]
// Convert plain JavaScript array to Uint8Array
const byteArray = Uint8Array.from(codeArray);
// Decode byte array as a UTF-8 string
return new TextDecoder('utf-8').decode(byteArray); // ''
我正在尝试从文本字符串中提取 Unicode,然后用其解码的 Unicode 替换它以显示为正确的表情符号。我尝试使用正则表达式提取 Unicode 字符串,但是,它转换为随机垃圾字符,并且正则表达式结果为空。
如何在不更改其余文本的情况下用表情符号替换给定的代码?
function replaceEmoji(text){
let str = "lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum";
let res = str.match(/[\]\w+/g);
console.log(str);
console.log(res); //Result is null
}
Console output of the above code
编辑:Regex Pattern I tested
您正在尝试解码一些 UTF8,但您混淆了 JS 字符串转义和字节。
当您键入 \uXXXX
时,您键入的是 unicode 代码点的转义符(就像 \n
是换行符的转义符一样),例如:"\u0041" == "A"
这就是您的正则表达式无法匹配任何内容的原因,字符串中实际上没有反斜杠 \
。现在不清楚你的 UTF8 是以什么形式传入的,但如果它像你写的那样,它是一系列需要像这样解码的 UTF8 字节:
const utf8 = new Uint8Array(Array.prototype.map.call("lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum", c => c.charCodeAt(0)));
console.log(new TextDecoder('utf8').decode(utf8));
我正在对我的数据执行类似 website 的操作。我有以下格式的 Unicode,将 UTF16 转换为 UTF 字符串的代码有效。
function decodeFBEmoji (fbString) {
// Convert String to Array of hex codes
const codeArray = (
fbString // starts as '\u00f0\u009f\u0098\u00a2'
.split('')
.map(char => (
char.charCodeAt(0) // convert '\u00f0' to 0xf0
)
); // result is [0xf0, 0x9f, 0x98, 0xa2]
// Convert plain JavaScript array to Uint8Array
const byteArray = Uint8Array.from(codeArray);
// Decode byte array as a UTF-8 string
return new TextDecoder('utf-8').decode(byteArray); // ''
我正在尝试从文本字符串中提取 Unicode,然后用其解码的 Unicode 替换它以显示为正确的表情符号。我尝试使用正则表达式提取 Unicode 字符串,但是,它转换为随机垃圾字符,并且正则表达式结果为空。 如何在不更改其余文本的情况下用表情符号替换给定的代码?
function replaceEmoji(text){
let str = "lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum";
let res = str.match(/[\]\w+/g);
console.log(str);
console.log(res); //Result is null
}
Console output of the above code
编辑:Regex Pattern I tested
您正在尝试解码一些 UTF8,但您混淆了 JS 字符串转义和字节。
当您键入 \uXXXX
时,您键入的是 unicode 代码点的转义符(就像 \n
是换行符的转义符一样),例如:"\u0041" == "A"
这就是您的正则表达式无法匹配任何内容的原因,字符串中实际上没有反斜杠 \
。现在不清楚你的 UTF8 是以什么形式传入的,但如果它像你写的那样,它是一系列需要像这样解码的 UTF8 字节:
const utf8 = new Uint8Array(Array.prototype.map.call("lorem ipsum lorem ipsum \u00e2\u009d\u00a4\u00ef\u00b8\u008f lorem ipsum", c => c.charCodeAt(0)));
console.log(new TextDecoder('utf8').decode(utf8));