highcharts 导出excel 中文乱码。

引入 http://cdn.hcharts.cn/highcharts-plugins/export-csv.js
就会有导出excel的功能。但是导出的excel 中文显示的是乱码。
 
已邀请:

john - 个人微博:http://weibo.com/u/2175683160

赞同来自: 磐石依旧

sorry,由于 http://cdn.hcharts.cn/highcharts-plugins/export-csv.js 插件更新了,上面说到的论坛中的解决办法可能已经不适用,关于乱码其实就是编码问题,后续我会跟进。

john - 个人微博:http://weibo.com/u/2175683160

赞同来自:

中文论坛中早就有了相关的讨论,见:http://bbs.hcharts.cn/thread-99-1-1.html
 
由于中文论坛已经不再维护,所以我将其中关键部分贴到这里吧。
 
一、导出 Excel 原理分析
 
通过分析源码,其原理是遍历Highcharts的数据列,并取值构造成逗号分开的字符串,并提交到指定的导出服务器下载保存为.csv文件。
 
默认情况下是将数据提交到 官方的导出服务,代码很简单,就只是个 php 文件,代码如下:
<?php
$csv = $_POST['csv'];
if ($csv) {
header('Content-type: text/csv');
header('Content-disposition: attachment;filename=chart.csv');
echo $csv;
}
?>

对应的可以自定义导出服务的地址:
$("#download").click(function(){
Highcharts.post('/question/192/export_cvs.html', { //其中export-cvs.php即为上面代码
csv: chart.getCSV()
});
})

 
二、补充:Office Excel打开时乱码问题解决办法

1、乱码分析
     我用记事本或WPS Excel打开导出的cvs文件时,中文不会乱码,而用Office的Excel打开时,中文就乱码。后来网上查了下,原因是Office的Excel默认是以ANSI 形式打开的,也就是对应中文GBK编码,而默认导出的是UTF-8格式,解决办法就是编码转换。

2、解决办法
     将获取的cvs代码转换为GBK编码即可,修改后的导出服务器代码如下
 
1)php 版
<?php
/**
* 由Highcharts中文网修改提供中文乱码解决办法
*/
$csv = $_POST['csv'];
$csv = iconv("utf-8","gbk",$csv);//转换成GBK编码

if ($csv) {
header('Content-type: text/csv;charset=gbk');
header('Content-disposition: attachment;filename=chart.csv');
echo $csv;
}
?>

2)Java 版
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String csv = new String(request.getParameter("csv").getBytes("utf-8"),"gbk");
if(csv!=null && !"".equals(csv)) {
response.setHeader("Content-type","text/csv");
response.setHeader("Content-disposition", "attachment;filename=chart.csv");
response.getWriter().print(csv);
}
%>

磐石依旧

赞同来自:

谢谢您的回答!我看到了之前的那篇文章,但是并没有提到在js code中如何覆盖默认的URL?

要回复问题请先登录注册