Magento大部分数据可以导出CSV的格式,但Magento导出的CSV默认编码为UTF-8并且没有BOM头,Excel打开带中文的UTF-8编码的CSV时,因为没有BOM头,默认显示为GBK编码所以中文会显示成乱码。
解决这个问题的方法有两种:
方法一:
在导出的过程中将编码转成GBK再输出,对字符串转编码可以使用ICONV函数,MagenTo里可以参考添加这个方法:
文件:app/code/core/Mage/Adminhtml/Block/Widget/Grid.php
1
2
3
4
5
6
7
8
9
10
11
|
protected function d_encodeUTF8( $array ){ foreach ( $array as $key => $value ){ $array [ $key ] = ! is_array ( $value )?iconv( "UTF-8" , "GBK" , $value ): $this ->d_encodeUTF8( $array [ $key ]); } return $array ; } |
然后在_getExportHeaders()里的return $row前添加:
1 | $row = $this ->d_encodeUTF8( $row ); |
方法二:
为输出的UTF8编码CSV文件添加BOM头
将文件:app/code/core/Mage/Adminhtml/Block/Widget/Grid.php里的
1
2
3
|
protected function _getExportHeaders(){ } |
方法 换成
1
2
3
4
5
6
7
8
9
10
|
protected function _getExportHeaders() { $row = array (); foreach ( $this ->_columns as $column ) { if (! $column ->getIsSystem()) { $row [] = "\xEF\xBB\xBF" . $column ->getExportHeader(); } } return $row ; } |
即可