首先,绝对不是UTF-8,它只是一个字符集(即一种在内存中存储字符串/显示它们的方法).
你在这里看起来像是用于构建每个字符的字节的转储.
如果是这样,您可以通过这种方式获取这些字节:
$str = utf8_encode("Demo Message!!!");
for ($i=0 ; $i<strlen($str) ; $i++) {
$byte = $str[$i];
$char = ord($byte);
printf('%02x ', $char);
}
Run Code Online (Sandbox Code Playgroud)
你会得到以下输出:
44 65 6d 6f 20 4d 65 73 73 61 67 65 21 21 21
Run Code Online (Sandbox Code Playgroud)
但是,再一次,这不是UTF-8:在UTF-8中,就像你在我给出的例子中看到的那样,D只存储在一个字节上:0x44
在您发布的内容中,它使用两个字节存储:0x00 0x44.
也许你正在使用某种UTF-16?
经过一些测试后编辑和@ aSeptik的评论:这确实是UTF-16.
为了得到你正在获得的那种转储,你必须确保你的字符串是用UTF-16编码的,这可以通过这种方式完成,例如,使用mb_convert_encoding函数:
$str = mb_convert_encoding("Demo Message!!!", 'UTF-16', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
然后,只需迭代生成此字符串的字节,并像之前那样转储它们的值:
for ($i=0 ; $i<strlen($str) ; $i++) {
$byte = $str[$i];
$char = ord($byte);
printf('%02x ', $char);
}
Run Code Online (Sandbox Code Playgroud)
你会得到以下输出:
00 44 00 65 00 6d 00 6f 00 20 00 4d 00 65 00 73 00 73 00 61 00 67 00 65 00 21 00 21 00 21
Run Code Online (Sandbox Code Playgroud)
哪种看起来像你发布的:-)
(你只需要删除调用中的空格printf- 我让它在那里获得更容易阅读的输出=)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |