php - 如何在 PHP 中将双字节 utf-8 字符转换为 utf-16

标签 php encoding utf-8 character-encoding

我有如下双字节utf8字符

\ud83d\ude04

(这是一个 ios 表情符号)。 我想转换成 utf-16

U+1F604

我该怎么做? 我尝试了以下方法:

$utf8_string = "\ud83d\ude04";
$utf16_string = mb_convert_encoding($utf8_string, 'UTF-16', 'UTF-8');

但我得到了原始的 utf8 字符串。它不会被转换。

我想我可能需要先解码 utf8 字符串。我已经尝试使用 json_decode 来执行此操作(它非常适合解码 utf8 字符集)。但仍然没有喜悦。

最佳答案

首先,让我们弄清楚条款:

  • \ud83d\ude04 是 Unicode 转义序列,例如用于 Javascript。它不是“UTF-8”。
  • 它也不是“双字节”,而是代理对。
  • U+1F604 是 Unicode 代码点的官方表示法。它不是“UTF-16”。

第一步是从“\ud83d\ude04”得到一个UTF-8编码的字符串。最简单的方法是:

$utf8 = json_decode('"\ud83d\ude04"'); // note the added "" quotes

要从此处转换为 UTF-16 编码的字符串,只需执行以下操作:

iconv('UTF-8', 'UTF-16', $utf8)

然而,结果不是“U+1F604”,而是一个 UTF-16 编码字符串(其十六进制表示为 feffd83dde04)。

要获得 Unicode 代码点表示法,最简单的方法可能是转换为 UCS-4 并调整前导零:

$ucs4      = iconv('UTF-8', 'UCS-4', $utf8);
$codepoint = sprintf('U+%04s', ltrim(strtoupper(bin2hex($ucs4)), '0'));

关于php - 如何在 PHP 中将双字节 utf-8 字符转换为 utf-16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963230/

相关文章:

php - 有效检查数据库中是否存在值

ios - 如何在 Swift 中将字符串转换为 unicode(UTF-8) 字符串?

string - 最新的 Delphi 编译器版本和字符串类型兼容性

c++ - 将包含重音字符的 UTF-8 字符串转换为 UTF-16

php - while($array = mysql_fetch_array($queryresults) && $i <= '9' ){ echo "stuff"}

javascript - x-editable 的成功回调不起作用

javascript - 使用 HTML onClick 将 PHP 变量作为参数传递

java - 使用 Unicode 字符进行 Lucene 搜索

python - 如何在 Python 3.2 或更高版本中使用 'hex' 编码?

Java Base64 解码/编码往返不会得出相同的结果