我正在用我的数据做类似于这个网站的事情。我有下面格式的Unicode,并且将UTF16转换为UTF字符串的代码可以工作。
function decodeFBEmoji (fbString) {
// Convert String to Array of hex codes
const codeArray = (
fbString // starts as 'u00f0u009fu0098u00a2'
.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,以显示为正确的表情符号。我尝试使用regex来提取Unicode字符串,但是,它转换为随机垃圾字符,regex结果为null。如何在不更改其余文本的情况下用表情符号替换给定代码?
function replaceEmoji(text){
let str = "lorem ipsum lorem ipsum u00e2u009du00a4u00efu00b8u008f lorem ipsum";
let res = str.match(/[\]w+/g);
console.log(str);
console.log(res); //Result is null
}
控制台输出上述代码
编辑:Regex Pattern I测试
您试图解码一些UTF8,但却混淆了JS字符串转义和字节。
当您键入uXXXX
时,您为unicode代码点键入了一个转义符(就像n
是换行符的转义符一样),因此这是真的,例如:"u0041" == "A"
这就是正则表达式无法匹配任何内容的原因,字符串中实际上没有反斜杠。现在还不清楚你的UTF8是以什么形式出现的,但如果它像你写的那样,那就是一系列UTF8字节,需要这样解码:
const utf8 = new Uint8Array(
Array.prototype.map.call(
"lorem ipsum lorem ipsum u00e2u009du00a4u00efu00b8u008f lorem ipsum",
c => c.charCodeAt(0)
)
);
console.log(new TextDecoder('utf8').decode(utf8));