表情符号未正确编码为十六进制
Emojis not correctly encode into hexadecimal
$message = "Spanish Language
á, é, í, ó, ú, ñ, ü
";
$hex = '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto')));
当我将 $hex 发送到以下 API 时,除表情符号外,一切都很好,相反,如果表情符号 ?
符号出现在手机中
https://api.txtlocal.com/docs/encodingdecodingunicode
请指正我做错了什么。
这些表情符号无法在 UCS-2 中表示。在 UTF-16 中,它们使用代理对表示,这在 UCS-2 中不受支持。例如,以 UTF-16 编码为:
0x3d 0xd8 0x0b 0xde
这是四个字节,尽管它应该只是一个字符。 UCS-2 保证它包含的所有字符将恰好占用两个字节,因此不包括在内。
我修复了这个问题,只需更改以下代码行
return '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UTF-16','UTF-8')));
$message = "Spanish Language
á, é, í, ó, ú, ñ, ü
";
$hex = '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto')));
当我将 $hex 发送到以下 API 时,除表情符号外,一切都很好,相反,如果表情符号 ?
符号出现在手机中
https://api.txtlocal.com/docs/encodingdecodingunicode
请指正我做错了什么。
这些表情符号无法在 UCS-2 中表示。在 UTF-16 中,它们使用代理对表示,这在 UCS-2 中不受支持。例如,以 UTF-16 编码为:
0x3d 0xd8 0x0b 0xde
这是四个字节,尽管它应该只是一个字符。 UCS-2 保证它包含的所有字符将恰好占用两个字节,因此不包括在内。
我修复了这个问题,只需更改以下代码行
return '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UTF-16','UTF-8')));