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

Unicode转义序列解码异常求助:Ñ无法解析为Ñ

问题原因:黑盒系统的编码错误,而非函数使用问题

先给你拍板:这锅得黑盒系统背,你用json_decode()的方式完全没问题。下面给你掰明白为啥会出现这种乱码,以及怎么解决:

为啥会变成Ñ?

先搞懂Ñ的正确编码逻辑:

  • Ñ对应的Unicode码点是 U+00D1,所以在JSON里正确的转义写法应该是 \u00d1;
  • 如果直接用UTF-8编码Ñ,得到的字节是 0xC3 0x91。

你的黑盒系统明显在编码时搞反了逻辑:它没有直接把Ñ转成\u00d1,而是先把Ñ转成了UTF-8字节0xC3 0x91,然后又把这两个字节分别当作独立的Unicode字符转成了转义序列——而且还转错了,把0x91写成了0x2018(对应左单引号‘),所以最终输出了\u00c3\u2018。

当json_decode()解析这段内容时,会老老实实把\u00c3解析成Ã,\u2018解析成‘,拼起来自然就是你看到的Ñ了。

临时补救办法(改不了黑盒的话)

如果暂时没法让黑盒修复输出,你可以在PHP里手动修正:

方法一:替换错误的转义序列再解析

<?php
$json = '{"AR_DESCRI":"LIMA CENTIMETRADA\/FORMAS U\u00c3\u2018AS 100\/180 MANI."}';
// 把错误的转义串直接换成正确的Ñ的Unicode转义
$fixedJson = str_replace('\u00c3\u2018', '\u00d1', $json);
$obj = json_decode($fixedJson);
print_r($obj);
// 输出:stdClass Object ( [AR_DESCRI] => LIMA CENTIMETRADA/FORMAS UÑAS 100/180 MANI. )
?>

方法二:解析后修复字符串

<?php
$json = '{"AR_DESCRI":"LIMA CENTIMETRADA\/FORMAS U\u00c3\u2018AS 100\/180 MANI."}';
$obj = json_decode($json);
// 先把解析后的字符串从UTF-8转成ISO-8859-1,再转回UTF-8修复编码错位,最后替换错误的单引号
$fixedStr = mb_convert_encoding($obj->AR_DESCRI, 'UTF-8', 'ISO-8859-1');
$fixedStr = str_replace('‘', 'Ñ', $fixedStr);
echo $fixedStr;
// 输出:LIMA CENTIMETRADA/FORMAS UÑAS 100/180 MANI.
?>

根本解决思路

最靠谱的还是让黑盒系统改输出逻辑:要么直接把特殊字符转成对应的Unicode转义(比如Ñ转成\u00d1),要么直接输出UTF-8编码的JSON,不要对正常的UTF-8字节做多余的转义操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:58:12