MS的Office Excel打开CSV文件默认是以ANSI, UNICODE格式打开的(对旧版本是这样, 2007好像已经能根据BOM来识别UTF-8了, 但2003还不行)
下面来说如何针对不同的office版本EXCEL都来兼容CSV
思路就是:将你的编码转成UTF-16LE后, 再加一个UNICODE的BOM头”/xFF/xFE”, 最后下载, 这样下载下来的CSV就是UNICODE格式的了
PHP程序例子:
$str4File = iconv(‘UTF-8′, ‘UTF-16LE’, $content); //转码成utf-16的小尾序(http://zh.wikipedia.org/wiki/UTF-16), 这是微软和linux系统使用的UNICODE存储文字格式, 苹果系统使用的是大尾序存储文字格式, 那样就需要用UTF-16BE, 而bom头使用FE FF
$str4Download = gzencode(“/xFF/xFE”.$str4File); //加入bom头, 压缩内容
header(‘Content-type: text/csv; charset=UTF-16LE’);
header( “Content-Length: “.strlen($str4Download) );
header( “Content-Disposition: attachment; filename=/”$filename/”" );
echo $str4Download;
有一点要注意:
就是Unicode编码的.CSV文件可能不支持”,”分割,需要”/t”空格来分割
这是另外一篇介绍 解决CSV乱码的文章, 可参考:http://wangblog.org/2007/12/utf-8unicode.html
介绍: UTF-8, UTF-16与UNICODE的关系
所谓“utf-8”“utf-16”只是UCS Transformation Format,只是UNICODE的一种表现形式, UCS 即是 Unicode Character Set.
更详细的资料, 参考wiki