我写了一个小的php脚本来将字符串转换成十六进制,但是我有一个问题或者我遗漏了一些东西,下面是一个小测试:
$char='だ';
$a='a';
echo $char,':', bin2hex($char),"\n";
echo $a,':', bin2hex($a),"\n";我得到的'a‘(或任何ASCII)的结果是正确的,但对于中文、希伯来语或阿拉伯语是不正确的,下面是输出:
だ:e381a0
a:61这个长数字是什么?来自charmap工具的这个字符(だ)的十六进制是3060,但是为什么我从PHP中得到了错误的值。
谢谢。
发布于 2011-01-10 20:03:20
0xE381A0是だ的UTF8编码
U+3060 だ e3 81 a0 HIRAGANA LETTER DAhttp://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()。
发布于 2011-01-10 19:56:45
这可能是一个3字节的Unicode字符,因此bin2hex()返回三个十六进制值。如果您仍然感到困惑,请参阅此phpsh输出:
php> =bin2hex('adam')
"6164616d"https://stackoverflow.com/questions/4646499
复制相似问题