Highcharts是utf-8编码的,其也是utf-8格式的,导致网页如果采用gb2312编码,显示正常,导出就乱码了。这种现象也同样经常出现在ajax的使用过程中。
ajax中一般的解决办法就是将中文等非英文的字符进行escape编码,再由后端模拟unescape解码,以避免编码的问题。跟着这个思路修改以解决Highcharts的导出乱码问题。同时为了配合后端简化,我使用了encodeURIComponent去编码。
由于需要在提交之前进行编码,那么我们需要修改Highcharts的导出文件的源码,你需要慎重考虑下。
1.
我们修改js/modules/exporting.src.js中的Highcharts.post方法:
// add the datafor (name in data) { createElement('input', { type: HIDDEN, name: name, value: encodeURIComponent(data[name])//here we add escape for all value }, null, form);}
修改上面的代码,在value的值前全部加上encodeURIComponent的编码方法。
2.后端
我们修改项目中的Exporter.cs,在class Exporter下增加下面的函数,并将接收的参数进行编码:
////// Unescape for javascript escape. Return string;/// public static string UnEscape(string str){ return HttpUtility.UrlDecode(str);}//在Exporter中我们同样要修改如下//unescape all argumentsstring extension;fileName = UnEscape(fileName);this.ContentType = UnEscape(type).ToLower();this.Name = fileName;this.Svg = UnEscape(svg);
保存,生成,将生成的dll文件覆盖现在使用的,再次导出基本上可以解决乱码的问题。
其他说明
1.由于使用的是HttpUtility.UrlDecode()方法,如果你传递前没有encodeURIComponent,且编码就为utf-8,那么导出也是正常的;
2.没有经过大数据的测试,用于正式项目前建议您先测试下;
3.压缩包:
4.由于使用了编码,因此导出的文件名也是可以被指定为中文的;
5.导出文件的width必须被指定,否则导致导出出错,待修复。
压缩包中的版本已经修复的问题:
1.未选中项目导出时未被忽略,描述:
2.网页为gb2312,导出时中文乱码问题。
本文固定链接: