utf8_encode 不是编码/转换字符

Posted

技术标签:

【中文标题】utf8_encode 不是编码/转换字符【英文标题】:utf8_encode not encoding/converting character 【发布时间】:2022-01-20 17:48:19 【问题描述】:

我正在尝试使用 utf8_encode 来显示一些重音字符(为了将它们放入 json 中),但由于某种原因它似乎失败了,我不明白为什么。这是我通过 php 测试仪运行的测试数据:

    $data = '"14446":"discreci\u00f3n","14450":"prudencia","14461":"experiencia","14491":"vida"';
    $data = preg_replace('|u00([A-Fa-f0-9][A-Fa-f0-9])|', 'x$1', $data);
    echo $data;
    echo "\r\n\r\n";
    $data = preg_replace('/"\d*":/','',$data); 
    echo $data;
    echo "\r\n\r\n";
    $data = preg_replace('/["?!]/','',$data);
    echo $data;
    echo "\r\n\r\n";
    $data_array = explode(",", $data); 
        
        foreach ($data_array as $data) 
            echo $data;
            echo "\r\n\r\n";
        
        
    echo utf8_encode($data_array[0]);

    echo "\r\n\r\n";
    echo utf8_encode("discreci\xf3n");

哪个输出:

"14446":"discreci\xf3n","14450":"prudencia","14461":"experiencia","14491":"vida"

"discreci\xf3n","prudencia","experiencia","vida"

discreci\xf3n,prudencia,experiencia,vida

离散\xf3n

审慎

经验

维达

离散\xf3n

谨慎

如你所见,如果我直接输入它,它会转换它,但如果它作为变量接收它,它不会转换它,即使它被引号包围,例如:

foreach ($data_array as $data) 
                $data = '"' . $data . '"';
                echo $data;
                echo "\r\n\r\n";
            

也不转换它。

那么 - 我做错了什么?

【问题讨论】:

原始字符串似乎已经是有效的 JSON:3v4l.org/DomZc。我不清楚你为什么需要 RegEx? 执行简单的json_decode($data) 将显示重音字符。 JSON 支持\u00f3 语法,因此如果您要使用正则表达式将其转换为重音字符,然后使用json_encode,它会将其转换回\u00f3 @ChrisHaas,数字字符串无关紧要,我还需要处理其他数据 @user8539669,我仍然不清楚你的问题。在这个站点上的几乎所有情况下,当有人使用文本编码功能做某事时,他们都在做一些困难且通常是错误的事情。我不是做错了,要清楚,这只是我的第一个直觉,因为我不完全理解这个问题。您已经发布了示例输入,您能否发布您期望的示例输出以帮助我们更好地理解? @ChrisHaas Jasen 在下面的建议对其进行了整理,但我最终需要列出一个词对列表([[fuerza, vida], [fuerza, discreción], [fuerza, prudencia]])我可以跳入不同的程序 【参考方案1】:

您创建一个包含\xf3 的字符串,这些都是ASCII 字符。 如果你想要ó,你可以使用stripcslashes 来激活嵌入的\

 echo utf8_encode(stripcslashes($data_array[0]));

但另一方面

foreach( json_decode($data,1) as $v )  echo $v ,"\n\n" ;

在原始 $data(preg_replace 之前)上工作得很好,并且支持所有 Unicode 而不仅仅是一个子集。

【讨论】:

谢谢,我可以使用 stripcslashes!

以上是关于utf8_encode 不是编码/转换字符的主要内容,如果未能解决你的问题,请参考以下文章

utf8和gbk可以直接转换么

PHP imap奇怪的编码字符

Python判断字符串中是不是有中文字符

将列从 varchar 转换为 nvarchar 是不是会更改存储在列中的字符串的编码?

json_encode() 非 utf-8 字符串?

Linux shell 命令 转换文件的字符编码