来自 MySQL 的乌尔都语/阿拉伯语字体数据显示为 ??????在 JSON

Urdu / Arabic font data from MySQL is displaying as ????? in JSON

我正在开发一个 Android 应用程序,其中 Urdu/Arabic 数据存储在我的网络服务器上的 MySQL 数据库中,并使用 JSON_Encoding 生成 JSON 字符串. JSON 字符串随后在 Android 应用程序中用于执行各种功能(使用数据填充 RecyclerView 和其他视图对象)。我可以将乌尔都语/阿拉伯语数据存储在 MySQL 数据库中,但是当我使用 PHP 脚本生成 JSON 时,所有包含乌尔都语字符的字段都将数据显示为 ?????? ?

我正在使用 utf8mb4_unicode_ci 因为我读到这很容易存储非英语数据和执行多种功能,但在这个编码问题之后,我已经将它改为 utf8_general_ci MySQL 数据库中的表和字段。下面是我用来从 MySQL:

生成 JSON 字符串的 PHP 脚本
<?php

require "conn.php";

mysqli_query("SET NAMES 'utf8'"); 
mysqli_query('SET CHARACTER SET utf8'); 

$sql_qry = "SELECT * FROM countrybasic;";

$result = mysqli_query($conn, $sql_qry);

$response = array();

while($row = mysqli_fetch_array($result)){
    array_push($response, array("id"=>$row[0],"name"=>$row[1],"capital"=>$row[2],"continent"=>$row[3],"population"=>$row[4],"gdp"=>$row[5]));
}

echo json_encode(array("server_response"=>$response));

mysqli_close($conn);
?>

名称和大写字段是我存储乌尔都语数据的字段。

请帮我解决这个问题。

谢谢。

您只需将字符集更改为 UTF8,您可以使用 PHP 这些行来完成此操作:

$statSQL= 'SET CHARACTER SET utf8'; 

mysqli_query($your_db,$sSQL) 
or die ('charset in DB didn\'t change'); 

希望对您有所帮助:)

$CONNECTION = mysqli_connect($host,$user,$password,$database);
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
   mysqli_query ($CONNECTION ,"set character_set_results='utf8'"); 
$queryutf8 = "select * from yourtable";
$res_utf8  = mysqli_query($CONNECTION ,$queryutf8 );
  1. 使用排序规则 utf8mb4_unicode_ci 创建您的 table [countrybasic] 并使用相同的排序规则创建名称列。
  2. 现在插入一些不同语言的示例数据。
  3. 使用MySQLi查询结果获取数据。

注意:如果您在排序规则不同时保存数据并在更改排序规则后获取该数据,则该数据将无法正确获取。

我希望这会奏效。

您需要更改wamp服务器中的默认utf8 查看下面的 link 了解更多详情。

Arabic characters doesn't show in phpMyAdmin