You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用hex2bin转换十六进制字符串出现乱码如何解决

问题根因

hex2bin() 直接解码得到的原始字节采用的是**Windows-1252(也叫CP1252,西欧地区常用的单字节编码)**编码,而非网页/终端默认的UTF-8编码,直接输出必然出现乱码。
你之前尝试的utf8_encode()、utf8_decode()本身就不适用当前场景:

  • utf8_encode() 仅支持将ISO-8859-1编码的字符串转为UTF-8,无法识别Windows-1252中0x80-0x9F区间的特殊字符(你代码里的0x96对应长破折号–,正好在这个区间,ISO-8859-1中该位置是不可打印的控制字符,会被渲染为乱码替换符�)
  • utf8_decode() 作用是将UTF-8字符串转为ISO-8859-1,和你的转换需求完全相反,只会加重乱码。
    核对字节映射可以完全匹配预期结果:0x96在Windows-1252编码中对应长破折号–,0xE1对应带尖音的小写字母á,和你给出的预期输出完全吻合。
修复代码

使用mb_convert_encoding()将解码后的原始字节从Windows-1252编码转为UTF-8即可,可直接运行的代码如下:

<?php
$string = "52656C6F6A204E616D69209620534B4D4549209620416375E17469636F";
$productname = mb_convert_encoding(hex2bin($string), 'UTF-8', 'Windows-1252');
echo $productname;
运行效果

执行上述代码会直接输出你需要的预期结果:

Reloj Nami – SKMEI – Acuático

内容的提问来源于stack exchange,提问作者Club

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:48:13