Highcharts导出gb2312乱码问题

Highcharts是utf-8编码的,其本地的.net导出环境也是utf-8格式的,导致网页如果采用gb2312编码,显示正常,导出就乱码了。这种现象也同样经常出现在ajax的使用过程中。

ajax中一般的解决办法就是将中文等非英文的字符进行escape编码,再由后端模拟unescape解码,以避免编码的问题。跟着这个思路修改以解决Highcharts的导出乱码问题。同时为了配合后端简化,我使用了encodeURIComponent去编码。

由于需要在提交之前进行编码,那么我们需要修改Highcharts的导出文件的源码,你需要慎重考虑下。

1.前端

我们修改js/modules/exporting.src.js中的Highcharts.post方法:

	// add the data
	for (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下增加下面的函数,并将接收的参数进行编码:

    /// <summary>
    /// Unescape for javascript escape. Return string;
    /// </summary>
    public static string UnEscape(string str)
    {
        return HttpUtility.UrlDecode(str);
    }

    //在Exporter中我们同样要修改如下
    //unescape all arguments
    string 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.压缩包:http://pan.baidu.com/share/link?shareid=1309032918&uk=352812205

4.由于使用了编码,因此导出的文件名也是可以被指定为中文的;

5.导出文件的width必须被指定,否则导致导出出错,待修复。

压缩包中的版本已经修复的问题:

1.未选中项目导出时未被忽略,描述:http://www.cnblogs.com/youngerliu/p/3177252.html

2.网页为gb2312,导出时中文乱码问题。

本文固定链接: https://jucelin.com/highcharts_export_gb2312.html | Jucelin

该日志由 jucelin 于2013年08月05日发表在 后台开发 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Highcharts导出gb2312乱码问题 | Jucelin
关键字: , , ,

Highcharts导出gb2312乱码问题:目前有8 条留言

  1. 5楼
    六间房:

    天长是那个地方站?!

    2014-03-31 22:50
  2. 4楼
    袜子:

    乱码确实是应该防范的工作。谢谢博主,再次分享

    2013-11-30 13:52
    • jucelin:

      主要是老外写的东西不会考虑中文编码的

      2013-12-08 14:43
  3. 地板
    灰狼:

    天长网站是你的?

    2013-10-31 15:41
  4. 板凳
    西门:

    好巧,今天在一个网站上看见一个图标,好奇看了下js,就是你说的Highcharts :mrgreen:

    2013-10-16 14:13
    • jucelin:

      我也是在DNSPOD上看到的,就用在公司内部项目中了。非IE效果不错,但IE就降了一档了。看重他更重要的是兼容IE6 :lol:

      2013-10-16 18:59
  5. 沙发
    白小黑:

    林学长。。。去我的博客逛逛噻。。。

    2013-09-30 14:41

发表评论

您必须 [ 登录 ] 才能发表留言!

更多