【问题标题】:Emojis not correctly encode into hexadecimal表情符号未正确编码为十六进制
【发布时间】:2019-07-13 06:28:28
【问题描述】:
$message = "Spanish Language 
á, é, í, ó, ú, ñ, ü
???? ???? ???? ???? ???? ???? ???? ????";
$hex = '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto')));

当我将 $hex 发送到以下 API 时,除了表情符号之外,其他一切都很好,如果手机中出现表情符号 ? 符号

https://api.txtlocal.com/docs/encodingdecodingunicode

请纠正我做错了什么。

【问题讨论】:

  • UCS-2 是必需的吗?
  • 不是 100% 确定,只是按照文档示例,我尝试使用 UCS-4 但同样的问题
  • 如果你使用mb_convert_encoding($message, 'UTF-8','auto')呢?
  • 我尝试使用 UTF-8 但收到空消息

标签: php unicode encoding hex emoji


【解决方案1】:

这些表情符号在 UCS-2 中无法表示。在 UTF-16 中,它们使用代理对表示,UCS-2 不支持这些代理对。例如,? 以 UTF-16 编码如下:

0x3d 0xd8 0x0b 0xde

这是四个字节,尽管它应该只是一个字符。 UCS-2 保证它包含的所有字符都将占用两个字节,因此不包括?。

【讨论】:

【解决方案2】:

我解决了这个问题,只需按照代码行进行更改

return '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UTF-16','UTF-8')));

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2017-06-23
    • 2020-12-15
    • 2017-12-17
    • 2015-09-27
    • 2011-09-03
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多