zoukankan      html  css  js  c++  java
  • 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,导出时中文乱码问题。

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

  • 相关阅读:
    JS 知识点补充
    JS 数据之间类型的转化
    JS 数据的类型
    数据结构--数组、单链表和双链表介绍 以及 双向链表
    数据结构--队列
    数据结构--栈
    24. 两两交换链表中的节点
    23. 合并K个排序链表
    22. 括号生成
    21. 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/ziye/p/3459290.html
Copyright © 2011-2022 走看看