[英]MySQL to JSON: Issue with encoding of German special characters in UTF-8
我编写了一个小脚本,该脚本从MySQL表获取数据并将其放入JSON数组。 但是,即使我到处都设置了UTF-8,字符编码还是有问题。 这是脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<?php
header('Content-type: text/html; charset=UTF-8');
$con = mysqli_connect("HOST", "USERNAME", "PASSWORD", "DATABASE");
if (!$con) {
trigger_error('Could not connect to MySQL: ' . mysqli_connect_error());
}
mysqli_set_charset($con,"utf8");
mysql_query("SET NAMES SET 'utf8'");
mysql_query("SET character_set_client = 'utf8'");
mysql_query("SET character_set_connection = 'utf8'");
mysql_query("SET character_set_results = 'utf8'");
$sql = "SELECT * FROM table";
$result = mysqli_query($con, $sql);
$rows = array();
while($r = mysqli_fetch_assoc($result)) {
$rows[]=$r;
}
print json_encode($rows);
mysqli_close($con);
?>
</html>
在输出中,我得到的值是“ \\ u00e4”而不是“ä”。
一些其他信息:
我究竟做错了什么? 谢谢你的帮助!!
在我看来,一切工作正常。 之所以看到\ä
而不是ä
是因为JSON序列化程序的实现。 序列化器正在执行的操作完全正确。
任何字符都可以转义。 如果字符在基本多语言平面中(U + 0000至U + FFFF),则可以表示为六个字符的序列:反向固线,后跟小写字母u,后跟四个编码十六进制数字字符的代码点。 十六进制字母A至F可以为大写或小写。 因此,例如,仅包含单个反斜线字符的字符串可以表示为“ \\ u005C”。
我怀疑为什么此序列化程序会为您转义,原因是因为PHP本身不支持unicode 。
字符串是一系列字符,其中一个字符与一个字节相同。 这意味着PHP仅支持256个字符的集合,因此不提供本机Unicode支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.