You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP通过REST API向Android发送泰米尔语JSON显示问号求助

解决泰米尔语JSON在Android端显示问号的问题

看起来你遇到的是字符编码在API传输和解析环节的问题——虽然数据库存储泰米尔语内容正常,但PHP输出JSON时的编码处理没做好,导致Android端收到的字符乱码成问号。我来帮你一步步修复:

1. 修复数据库连接的字符集设置

你现在混用了已废弃的mysql_query()和mysqli扩展,这会导致编码设置完全不生效。而且mysqli_set_charset的位置不对,变量也不匹配(你用了$link但连接对象是$conn)。

把开头的所有mysql_query语句删掉,换成在数据库连接完成后立即设置mysqli的字符集:

// 假设你的DbConnect.php里已经创建了$conn连接对象
mysqli_set_charset($conn, 'utf8mb4'); // 用utf8mb4支持全量Unicode字符,适配泰米尔语等多语言

为什么选utf8mb4?它是UTF-8的超集,能支持所有Unicode字符,比旧的utf8更全面,适合多语言场景。

2. 修正JSON输出的编码参数

json_encode默认会把非ASCII字符转义成Unicode编码(比如\u0B85),虽然符合JSON标准,但部分Android解析库可能处理不当,导致显示问号。加上JSON_UNESCAPED_UNICODE参数,直接输出原始UTF-8字符:

header('Content-Type: application/json; charset=utf-8'); // 明确指定字符编码
echo json_encode($response, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE);

⚠️ 注意:header必须在echo之前设置,且脚本开头不能有任何输出(包括空格、换行),否则头信息会失效。

3. 清理脚本中的无效代码&修复安全问题

  • 你的脚本里有一段mysqli_query($conn, $query1);但$query1未定义,这是笔误,建议删掉或补全,避免报错中断输出。
  • 直接把$_POST参数拼进SQL语句有严重的SQL注入风险!一定要改用预处理语句:
// 替换原查询代码
$query = "SELECT que_desc,true_ans FROM question WHERE lesson = ? AND chapter = ?";
$stmt = mysqli_prepare($conn, $query);
mysqli_stmt_bind_param($stmt, "ss", $lesson, $chapter); // "ss"表示两个字符串类型参数
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

// 遍历结果的代码保持不变
$i=1;
while($row = mysqli_fetch_assoc($result)) {
    $response['question'][$i] = $row['que_desc'];
    $response['ans'][$i] = $row['true_ans'];
    $i++;
}

4. Android端的补充检查

如果做完以上修改仍有问题,检查Android端的网络请求是否用UTF-8解析JSON:

  • 比如用OkHttp时,确保响应的MediaType指定为application/json; charset=utf-8
  • 用JSONObject解析时,直接使用原始流解析,不要手动转码

把这些修改应用到你的脚本后,应该就能解决泰米尔语显示问号的问题了。

内容的提问来源于stack exchange,提问作者Anbu Azhagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:12