如何在没有导入文件的情况下使用unicode数据打开csv

时间:2013-09-11 16:16:51

标签: php excel unicode fwrite

下面是我如何在根文件夹中使用unicode字符写入数据

<?php
mysql_connect('localhost','root','');
mysql_query ("set character_set_client='utf8'"); 
mysql_query ("set character_set_results='utf8'"); 
mysql_query ("set collation_connection='utf8_general_ci'"); 
mysql_select_db('test') or die('3');

$q = mysql_query("SELECT * FROM `t1`");
$d = '';
while ($r = mysql_fetch_array($q)) {
    $d .= $r['col1'];
}

function writeUTF8File($filename,$content) {
    $f=fopen($filename,"w");

    # Now UTF-8 - Add byte order mark
    fwrite($f, pack("CCC",0xef,0xbb,0xbf));
    fwrite($f,$content);
    fclose($f);
}

writeUTF8File('utf.csv', $d);
?>

但是当使用Microsoft Office Excel 2007打开此文档时,数据将变为

enter image description here

进行快速研究后,我需要使用"From Other Sources"导入,然后我可以看到正确的数据

enter image description here

所以问题是如何在没有导入的情况下打开此文档(“From Other Sources”),因为稍后我需要将此文档传递给我的客户(不确定他们是否知道导入和在看到所有数据之前做一些设置)。

1 个答案:

答案 0 :(得分:0)

Mine Excel在带有BOM的UTF8 csv文件上表现良好。

使用十六进制编辑器检查csv文件。我很确定你有Excel编码的字符,而不是所需的字符。

请尝试以下操作:

$f=fopen($filename,"wb");

这将以二进制形式编写PHP字符串,而不是编码所有字符。

附加检查:如果您将$d输出到HTML,它会显示正确的字符吗?

我还从fwrite() and UTF8获得了一些信息。