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

导出CSV文件时泰米尔语字体乱码问题求助

解决CSV导出时泰米尔语乱码问题

泰米尔语导出CSV后显示乱码(如“தூதà¯à®¤à¯à®•à¯à®•à¯à®Ÿà®”),核心原因是多数CSV阅读器(如Excel)无法自动识别不带BOM的UTF-8编码,加上输出时的编码声明不够严谨。以下是针对性的修复方案:

关键修改点

  • 写入CSV前添加UTF-8 BOM头,让阅读器正确识别编码
  • 完善HTTP响应头的编码声明
  • 确保数据库读取的内容编码正确

修改后的完整代码

mysqli_set_charset($db, "utf8mb4");
$query = $db->query("$reports");

if($query->num_rows > 0){
    $delimiter = ",";
    $filename = "report_" . date('Y-m-d') . ".csv";

    // Create a file pointer
    $f = fopen('php://memory', 'w');

    // 写入UTF-8 BOM,让Excel等阅读器正确识别编码
    fwrite($f, "\xEF\xBB\xBF");

    // Set column headers
    $fields = array('Ticket No','Name','Phone','Zone','Ward','Street','Department','Category','Description','Asgn. Employee','Date','Overdue Date','Status Updated On','Status');

    fputcsv($f, $fields, $delimiter);

    // Output each row of the data, format line as csv and write to file pointer
    while($row = $query->fetch_assoc()){
        $lineData = array(
            $row['ticket_id'], 
            $row['empname'], 
            $row['COMP_MOB'], 
            $row['zone_name'], 
            $row['ward_name'],
            $row['ASSN_STREET'], 
            $row['name'], 
            $row['complaint_cat_name'], 
            $row['DEPT_DESCRIPTION'], 
            $row['emp_name'],
            $row['dateofsubmit'],
            $row['overdue'],
            $row['dateofupdate'],
            $row['STATUS']
        );
        fputcsv($f, $lineData, $delimiter);
    }

    // Move back to beginning of file
    fseek($f, 0);

    // Set headers to download file rather than displayed
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    
    // Output all remaining data on a file pointer
    fpassthru($f);
}
exit;
?>

额外说明

  1. UTF-8 BOM的作用:"\xEF\xBB\xBF"是UTF-8的字节顺序标记,添加后Excel等工具会自动以UTF-8编码解析文件,避免乱码。
  2. Header优化:将Content-Type改为text/csv; charset=utf-8,明确告知浏览器文件编码;移除了冗余的Content-Encoding(CSV是明文,不需要编码压缩声明)。
  3. 数据库编码确认:确保数据库表的字符集是utf8mb4,且连接时mysqli_set_charset($db, "utf8mb4")生效,保证从数据库读取的泰米尔语内容是正确的UTF-8格式。

内容的提问来源于stack exchange,提问作者Kiran Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:43:15