2

我试图让我的客户在 Excel 中查看一些 MySQL 数据。我使用了 PHP 的 fputcsv() 函数,例如:

public function generate() {
   setlocale(LC_ALL, 'ko_KR.UTF8');

   $this->filename = date("YmdHis");
   $create = $this->directory."Report".$this->filename.".csv";

   $f = fopen("$create","w") or die("can't open file");
   fwrite($f, "\xEF\xBB\xBF");

   $i = 1;
   $length = count($this->inputarray[0]);

   fwrite($f, $this->headers."\n");

   // print column titles
   foreach($this->inputarray[0] as $key=>$value) {
    $delimiter = ($i == $length) ? "\n\n" : ",";
    fwrite($f, $key.$delimiter);
    $i++;
   }

   // print actual rows
   foreach($this->inputarray as $row) {
    fputcsv($f, $row);
   }
   fclose($f);
  } 

我的客户是韩国人,MySQL 数据库的很大一部分包含 utf8_unicode_ci 中的值。通过使用上述函数,我成功生成了一个包含正确编码数据的 CSV 文件,该文件可以在我的机器上的 Excel 中正常打开(英文 Win7),但是当我在客户端计算机上的 Excel 中打开文件(韩文 Win7)时,字符又被打破了。我尝试将标题 (\xEF\xBB\xBF) 取出,并注释掉 setlocale,但无济于事。

你能帮我解决这个问题吗?

4

3 回答 3

1

如果,如您所说,您的 CSV 文件具有“正确编码的数据” - 即它包含有效的 UTF-8 字节流,并假设您客户端站点上文件的字节流是相同的(例如尚未损坏由于文件传输问题在传输中),那么听起来客户端机器上的 Excel 无法正确解释 UTF-8 的问题。这可能是因为它不受支持,或者在导入时需要选择某些选项来指示编码。因此,您可以尝试以不同的编码(使用mb_convert_encodingor iconv)生成文件。

如果您让您的客户导出包含韩语字符的 CSV,那么您将能够查看该文件并确定正在生成的编码。然后,您应该尝试使用该编码。

于 2011-01-28T13:40:20.103 回答
0

尝试将数据编码为 UTF-16LE,并确保文件具有适当的 BOM。

或者,向您的客户发送 Excel 文件而不是 CSV,那么编码应该不是问题

于 2011-01-28T08:55:22.873 回答
-1

尝试在每个 fwrite 调用中使用utf8_encode.

然后使用这里的建议:http ://www.php.net/manual/en/function.fwrite.php#69566

于 2011-01-28T02:27:49.917 回答