【问题标题】:Converting an emoji javascript unicode code to utf-8将表情符号 javascript unicode 代码转换为 utf-8
【发布时间】:2018-07-19 08:26:08
【问题描述】:

用户输入狗脸表情符号后,我得到了一个 Javascript 字符串 - U+1F436。

字符串似乎是 2 个 unicode 字符 - “\ud83d\udc36”。

我正在尝试将其转换为 utf-8。我调用 javascript encodeURIComponent(string) 并返回一个似乎不是有效的 utf-8 的 6 字节字符串。

我相信有效的 utf-8 长度为 4 个字节,从 0xF0 开始。

那么我如何将 "\ud83d\udc36" 转换为有效的 utf-8 字符串。

谢谢。

【问题讨论】:

  • "字符串似乎是 2 个 unicode 字符" 具体来说,它是两个 UTF-16 代码单元,它们形成了一个代理对。 (JavaScript 字符串实际上是一系列 UTF-16 代码单元,可以容忍无效的代理对。)

标签: javascript utf-8 character-encoding emoji


【解决方案1】:

试试这个:

function encode_utf8(s) {
  return unescape(encodeURIComponent(s));
}

function decode_utf8(s) {
  return decodeURIComponent(escape(s));
}

【讨论】:

  • 我在 unescape 上变得不确定。或者你能告诉我逃跑是做什么的,我可以复制它。
  • unescape 函数对百分比编码的字符串进行转义。例如var e = encodeURIComponent('\u0227'); console.log(e) "%C8%A7" var u = unescape(e);控制台.log(u); “ȧ”
  • 此解决方案将 utf-16 转义为两个 %udddd 序列。理想情况下,我希望将其转换为正确的 utf-8 - 即 4 个字节 0xF0、0x9F、0x98、0x81。但如果我不能,我可以使用这个解决方案作为备份 - 我很感激你的回答。
  • 实际上我发现 encodeURIComponent() 实际上确实将 utf16 正确转换为 utf8(4 字节序列)。问题出在服务器上。
  • 也感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2013-03-23
  • 2017-11-27
  • 2015-05-30
相关资源
最近更新 更多