簡體   English   中英

MySQL到JSON:UTF-8中德國特殊字符編碼的問題

[英]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”而不是“ä”。

一些其他信息:

  • 表位於utf8_general_ci中(及其所有列一樣)
  • PHP文檔在UTF8中

我究竟做錯了什么? 謝謝你的幫助!!

在我看來,一切工作正常。 之所以看到而不是ä是因為JSON序列化程序的實現。 序列化器正在執行的操作完全正確。

來自JSON RFC第2.5節字符串

任何字符都可以轉義。 如果字符在基本多語言平面中(U + 0000至U + FFFF),則可以表示為六個字符的序列:反向固線,后跟小寫字母u,后跟四個編碼十六進制數字字符的代碼點。 十六進制字母A至F可以為大寫或小寫。 因此,例如,僅包含單個反斜線字符的字符串可以表示為“ \\ u005C”。

我懷疑為什么此序列化程序會為您轉義,原因是因為PHP本身不支持unicode

字符串是一系列字符,其中一個字符與一個字節相同。 這意味着PHP僅支持256個字符的集合,因此不提供本機Unicode支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM