用户
 找回密码
 入住 CI 中国社区
搜索
查看: 10385|回复: 9
收起左侧

[已解决] CI框架-导出csv文件中文乱码问题(不修改CI系统核心文件)

[复制链接]
发表于 2011-2-23 23:45:02 | 显示全部楼层 |阅读模式
我使用CI数据库工具类的 从数据库结果集导出CSV文件 方法,
贴代码:

PHP复制代码
 
$this->load->dbutil();
$this->load->helper('file');
$this->load->helper('download');
 
$this->load->model('Mhome');
$query = $this->Mhome->get_word_csv();
$data = $this->dbutil->csv_from_result($query);
$Date = date("YmdHis");
$Filename = $Date.".csv";
force_download($Filename, $data);
 
复制代码



结果导出的csv文件里面的中文出现了乱码

网上找到的解决方案是:
修改CI框架system的database目录下的DB_utility.php文件
$item 改为 iconv("UTF-8","GB2312//IGNORE",$item)

这种解决方案,等于是认定了CI框架存在BUG自定义方法已经不能解决问题,所以只好修改ci的系统核心文件
但是我认为,考虑到项目的可移植性和框架升级,最好还是不要修改ci的系统核心文件

请问:如何在不修改ci的系统核心文件的前提下,也能让导出的csv文件的中文不出现乱码、正常显示???
 楼主| 发表于 2011-2-23 23:50:07 | 显示全部楼层
如何在不修改ci的系统核心文件的前提下,也能让导出的csv文件的中文不出现乱码、正常显示???
发表于 2011-2-24 09:23:40 | 显示全部楼层
CI是老外编的,想中文不乱码,最好还是都是用utf-8编码吧,从页面到数据库。
发表于 2011-2-24 14:30:57 | 显示全部楼层
你应该指定下数据库编码。
这肯定不是 BUG,除非你认为 php 的 mysql 函数有 BUG。
只不过是编码没设置对而已,因为这是老外开发的,所以你需要手动指定下。
 楼主| 发表于 2011-2-24 16:24:42 | 显示全部楼层
谢谢Hex和版主jeongee!

我已经指定过数据库编码了
贴代码:

PHP复制代码
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
 
复制代码


估计是 Microsoft Office Excel 的问题,
如果我用gVim、Komodo IDE、Zend Studio等编辑器或IDE打开 ci导出的csv文件,是没有中文乱码的。
但是用 Microsoft Office 2007 Excel 打开,中文就会有乱码。
(我用的是 Win7 正版 简体中文版操作系统,系统是gbk编码)

这个问题实在是没有解决,
所以我就不用CI的使用CI数据库工具类自带的从数据库结果集导出CSV文件方法,
我自己写了一个导出csv文件的方法,
即把从数据库获取的数据,手工遍历了一遍数组,
并且把所有的中文数据都iconv( "UTF-8","gbk",$data)一下——转化为gbk编码。

这样用Excel打开,就没有中文乱码了。
发表于 2011-2-26 00:19:38 | 显示全部楼层
回复 5# lafayu

呵呵,你用 Excel 啊??那乱码就很正常了,因为比尔盖茨不喜欢 UTF-8,他只喜欢 GB2312,呵呵
发表于 2011-3-1 22:50:29 | 显示全部楼层
回复  lafayu

呵呵,你用 Excel 啊??那乱码就很正常了,因为比尔盖茨不喜欢 UTF-8,他只喜欢 GB2312, ...
Hex 发表于 2011-2-26 00:19


哈哈哈
发表于 2011-5-25 15:30:41 | 显示全部楼层
楼主~  你直接把生成的数据
$data=iconv("UTF-8","GB2312//IGNORE",$data);

不就行啦~~~
发表于 2014-3-19 00:16:28 | 显示全部楼层
GBK 支持的字符更广泛一些, 并且 $name 里的也需要替换一下哦,不然标题乱码

iconv("UTF-8","GBK//IGNORE",$item)

iconv("UTF-8","GBK//IGNORE",$name)
发表于 2014-7-31 13:03:26 | 显示全部楼层
其实解决方案非常简单,该解决方案见博客,如果没有解决请留言
http://blog.csdn.net/xingjigongsi/article/details/38315329

本版积分规则