我写了一个小的PHP脚本将字符串转换为HEX 但是我有问题或者我错过了什么,这是一个小测试:
$char='だ';
$a='a';
echo $char,':', bin2hex($char),"\n";
echo $a,':', bin2hex($a),"\n";
我得到的'a'(或任何ASCII)的结果是正确的,但对于中文或希伯来文或阿拉伯文是正确的 不正确这是输出:
だ:e381a0
a:61
这个长号是什么,来自charmap工具的这个字符(だ)的HEX是3060 但为什么我从PHP中得到错误的值。
感谢。
答案 0 :(得分:2)
0xE381A0
是だ
的UTF-8编码:
U+3060 だ e3 81 a0 HIRAGANA LETTER DA
http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12192
如果您的输入应该是UTF-8,那么您的输出是正确的。
如果这是您想要的,您可以使用以下任何一项获得3060
:
iconv_set_encoding('internal_encoding', 'UTF-8');
echo bin2hex(iconv('UTF-8', 'ISO-10646-UCS-2', 'だ')) . PHP_EOL;
echo bin2hex(iconv('UTF-8', 'UNICODE-1-1', 'だ')) . PHP_EOL;
echo bin2hex(iconv('UTF-8', 'UTF-16BE', 'だ')) . PHP_EOL;
有关详细信息,请参阅iconv()。
答案 1 :(得分:0)
这可能是一个3字节的Unicode字符,因此bin2hex()
返回三个十六进制值。如果你仍然感到困惑,请看这个phpsh输出:
php> =bin2hex('adam')
"6164616d"