tomora 发表于 2013-8-28 15:15:37

如何让iTop导出的CSV文件的中文字符不乱码?[完整方案]

之前,admin管理员 根据在群里我们解决导出中文乱码的问题整理了一个帖子,导出各种带内容的csv文件都可以正常地显示中文字符。参见:http://www.ITILxf.com/thread-34301-1-1.html

今天,群里的Red Jonh网友,发现一个新的问题,只是照上面的方法修改完成后,在导出“数据管理”->“CSV导入”->“模板”的CSV文件时,保存下来的各种模板.csv文件仍然会乱码。于是,我有研究了一下程序,发现奇怪的,iTop在同样导出csv文件这样一个功能的时候,在这两个地方使用不同的方式生成csv文件。相当于必须同时修改这两处,才能保证导出的带内容的csv文件和模板csv文件都不出现乱码。

为了大家查看和使用方便,我把之前的修改和本次研究的结果整理发布在下面:

第一处:修改一个配置选项(修复系统绝大部分功能导出csv文件的中文乱码问题)
找到截图中的这个文件
http://www.ITILxf.com/forum.php?mod=attachment&aid=ODc3N3xjMDg4OWQwMnwxMzc3NjcyNjg3fDE3NTA5fDM0MzAx

该文件如图所示,初始安装好以后缺省是 只读的,需要临时把“只读”那个对号 去掉,使文件可以被修改。

然后打开该文件,找到第49行,内容应该为
'csv_file_default_charset' => 'ISO-8859-1',
修改为:
//'csv_file_default_charset' => 'ISO-8859-1',
'csv_file_default_charset' => 'UTF-8',

改好后保存。
然后再把 刚才去掉的只读选项,选中,保证“只读”前面的对号出现,然后确定或应用,以此保证该文件仍然为只读文件。
这样改完以后,CSV导出的中文不乱码了。

第二处:修改一个csv导出程序,修复模板导出csv文件中文不乱码问题
找到文件C:\xampp\htdocs\pages\csvimport.php,
打开文件,找到第435行,内容应该如下:
    $oPage->add($sResult);
把这一行修改为如下两行:
//    $oPage->add($sResult);
    $oPage->add("\xEF\xBB\xBF".$sResult);
然后保存文件。
这是,刷新模板导出的页面,重新导出模板的csv文件,打开新导出的csv文件试试看,是不是中文显示正常了?

希望大家喜欢。

sangning 发表于 2013-8-28 15:18:26

特别喜欢~~亲一个!

tomora 发表于 2013-8-28 15:23:04

sangning 发表于 2013-8-28 15:18 static/image/common/back.gif
特别喜欢~~亲一个!

:$ 哈哈,谢谢支持

huangjie528 发表于 2013-8-28 16:23:08

学习了。

willhwe 发表于 2013-8-28 17:32:20

提供第二种处理方法:第一步也是一样的,先修改config-itop.php中的charset(字符集)参数为UTF-8,帖子有,不赘述;然后,找到,C:\xampp\htdocs\pages\ajax.csvimport.php,找到文件的428行,在if ($sDisposition == 'attachment')函数前,增加下述代码:
$sCharset = MetaModel::GetConfig()->Get('csv_file_default_charset');
if ($sCharset == 'UTF-8')
{
$sOutputData = UTF8_BOM.iconv('UTF-8', 'UTF-8//IGNORE//TRANSLIT', $sResult);
                                }
else
{
$sOutputData = iconv('UTF-8', $sCharset.'//IGNORE//TRANSLIT', $sResult);
                                }       
然后往下找到 if ($sDisposition == 'attachment')函数,将"charset=utf8"修改为"charset=$sCharset",再将"$oPage->add($sResult)"修改为“$oPage->add($sOutputData)”;
最后,把"$oPage->add('<p><textarea rows="5" cols="100">'.$sResult.'</textarea></p>')"修改为"$oPage->add('<p><textarea rows="5" cols="100">'.$sOutputData.'</textarea></p>')"。
昨晚上述修改后,重启应用(不确定是否需要,建议重启),模板下载后,打开就正常了!!
页: [1] 2 3 4
查看完整版本: 如何让iTop导出的CSV文件的中文字符不乱码?[完整方案]