当前位置: 首页 > 面试题库 >

json_encode()非utf-8字符串?

袁博
2023-03-14
问题内容

因此,我有一个字符串数组,所有字符串都使用系统默认的 ANSI 编码,并从SQL数据库中提取。因此,存在256个不同的可能字符字节值(单字节编码)。
有没有一种方法可以使我json_encode()工作并显示这些字符,而不必utf8_encode()在我的所有字符串上使用并最终得到类似的东西\u0082

还是这是JSON的标准?


问题答案:

有没有一种方法可以使json_encode()工作并显示这些字符,而不必在所有字符串上都使用utf8_encode()并以“ \
u0082”之类的内容结尾?

如果你有一个ANSI编码的字符串,使用utf8_encode()的是 错误的
函数来处理这个问题。您需要先将其从ANSI正确转换为UTF-8。这肯定会减少Unicode转义序列的数量,例如\u0082从json输出中获取,但是从技术上讲,这些序列对json有效,您不必担心。

使用PHP将ANSI转换为UTF-8

json_encode
适用于UTF-8编码字符串。如果需要从编码的字符串成功创建有效的字符串,则需要将其重新编码/转换为first。然后将按文档所述工作。
__json``ANSI``UTF-8``json_encode

要将编码从ANSI(更正确地说,我假设您有一个Windows-1252编码的字符串,该字符串很流行,但错误地称为ANSI)转换为UTF-8您可以使用以下mb_convert_encoding()函数:

$str = mb_convert_encoding($str, "UTF-8", "Windows-1252");

PHP中另一个可以转换字符串的编码/字符集的函数是iconv基于libiconv调用的。您也可以使用它:

$str = iconv("CP1252", "UTF-8", $str);

注意utf8_encode()

utf8_encode()只为Latin-1而不是为ANSI。因此,当您通过该函数运行字符串时,将破坏该字符串中的部分字符。

有关返回内容的更细粒度控制json_encode(),请参见预定义常量列表(取决于PHP版本,包括PHP
5.4,某些常量尚未记录,仅到目前为止在源代码中可用)。

更改数组编码/迭代(PDO注释)

正如您在注释中写道,将函数应用于数组有问题,这是一些代码示例。它 总是 需要
更改编码使用前json_encode。这只是一个标准的数组操作,比较简单的情况下pdo::fetch()一个foreach迭代:

while($row = $q->fetch(PDO::FETCH_ASSOC))
{
  foreach($row as &$value)
  {
    $value = mb_convert_encoding($value, "UTF-8", "Windows-1252");
  }
  unset($value); # safety: remove reference
  $items[] = array_map('utf8_encode', $row );
}


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : UTF-8贯穿始终 (15个答案) 5年前关闭。 寻求 我正在寻找具有重音符号的行。列()的编码为。 编码 以下查询使用phpMyAdmin 返回: 以下显示期望值(称为函数): 显示的值: 然后使用以下代码对数组进行编码: 问题 Web浏览器收到以下值: 代替: (或等效的编码形式。) 题 文档指出可以在UTF-8上使用。我可以看到将值从LATIN1编

  • 问题内容: 如何将带有国际字符的json编码的字符串保存到数据库,然后在浏览器中解析解码的字符串? 问题答案: 这是一个编码问题。看起来在某些时候,数据被表示为ISO-8859-1。 流程的每个部分都需要UTF-8编码。 数据库连接 数据库表 您的PHP文件(如果您在文件中使用特殊字符,如上面的示例所示) 您输出的标题

  • 问题内容: 我有大量的文件和解析器。我要做的是剥离所有非utf-8符号并将数据放入mongodb中。目前,我有这样的代码。 不知何故我仍然出现错误 我不明白 有一些简单的方法吗? UPD :似乎Python和Mongo对Utf-8有效字符串的定义不同意。 问题答案: 请尝试在下面的代码行而不是最后两行。希望能帮助到你:

  • 问题内容: 如何使用Android解码utf-8字符串?我尝试使用此命令,但输出与输入相同: 问题答案: 字符串不需要编码。它只是一个Unicode字符序列。 要将字符串转换为字节序列时需要进行 编码 。您选择的字符集(UTF-8,cp1255等)确定了Character-> Byte映射。请注意,字符不必转换为单个字节。在大多数字符集中,大多数Unicode字符都转换为至少两个字节。 字符串的编

  • 问题内容: 我必须用Java处理这种情况: 我从声明了encoding = utf-8的客户端收到XML格式的请求。不幸的是,它可能不包含utf-8字符,并且有必要从我这一边的xml中删除这些字符(旧式)。 让我们考虑一个示例,其中该无效XML包含£(磅)。 1)我将xml作为带有£的java字符串(我现在无法访问接口,但我很可能将xml作为java的字符串)。我可以使用replaceAll(£,

  • 问题内容: 我遇到了这行遗留代码,我试图找出这些遗留代码: 据我了解,它是使用相同的charSet进行编码和解码。 这与以下内容有何不同? 在任何情况下,两条生产线的输出将不同? ps:只是要澄清一下,是的,我知道Joel Spolsky撰写的关于编码 的出色文章! 问题答案: 这可能是很复杂的方式 这缩短了String,而所使用的基础char []则更长。 但是,更具体地说,将检查每个字符是否都