使用UTF-8编码将数据从MySQL导出到Excel

buk*_*ski 2 php mysql csv excel

我有一个带utf8_general_ci排序规则的mysql行,当我将它导出到csv时,而不是我得到的正确的utf-8字符?…?€¦I等,如何让excel了解UTF-8编码这里是我的代码:

$conn = mysql_connect('localhost', 'root', 'asdfggh') or die(mysql_error());
mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET NAMES utf8"); 
mysql_select_db('table_name', $conn) or die(mysql_error($conn));

$query = sprintf('SELECT * FROM sudraba_birzs');
$result = mysql_query($query, $conn) or die(mysql_error($conn));

header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="'.date("d-m-Y_H:i") . '.csv'.'"'); 
echo "\xef\xbb\xbf";

$row = mysql_fetch_assoc($result);
if ($row) {
    echocsv(array_keys($row));
}

while ($row) {
    echocsv($row);
    $row = mysql_fetch_assoc($result);
}

function echocsv($fields)
{
    $separator = '';
    foreach ($fields as $field) {
        if (preg_match('/\\r|\\n|,|"/', $field)) {
            $field = '"' . str_replace('"', '""', $field) . '"';
        }
        echo $separator . $field;
        $separator = ',';
    }
    echo "\r\n";
}
Run Code Online (Sandbox Code Playgroud)

如何导出它以使所有字符正确显示(使Excel理解utf-8)并维护表格布局(使用行和列)

Álv*_*lez 6

您正在生成CSV,它基本上是纯文本文件.无法在此类文件中指定编码信息.大多数文本编辑器实现(更好或更差)编码自动检测.Excel没有.当您右键单击CSV文件时,Excel将简单地假设ANSI.(您需要使用"打开"菜单才能获得有关编码的提示.)

您唯一的选择(除了切换到另一种输出格式)是使用mb_convert_encoding()iconv()将数据转换为ANSI .但现在你有另一个问题:ANSI不是真正的编码,它基本上意味着"在我的 Windows计算机中设置的任何编码".首先,您必须找出大多数用户的典型编码.这主要取决于国家.例如,许多西欧国家使用Win-1252.