• JSON导出CSV中文乱码解决方案


    前言

          以往datagrid导出数据全部在后台搞定,现在就想换中思路去解决,正常情况下使用easyui datagrid ajax获取数据源时都是json格式,那么此时需要导出数据时只要把该数据源扔出来直接导出CSV即可。

    中文乱码

         导出CSV后,字母和数字正常,中文成了乱码,一番google发现,有人提出用BOM的方式解决,主要是在导出路径添加后缀 uFEFF

    导出方法

     1 function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
     2             //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
     3             var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
     4 
     5             var CSV = '';
     6             //Set Report title in first row or line
     7 
     8             CSV += ReportTitle + '
    
    ';
     9 
    10             //This condition will generate the Label/Header
    11             if (ShowLabel) {
    12                 var row = "";
    13 
    14                 //This loop will extract the label from 1st index of on array
    15                 for (var index in arrData[0]) {
    16 
    17                     //Now convert each value to string and comma-seprated
    18                     row += index + ',';
    19                 }
    20 
    21                 row = row.slice(0, -1);
    22 
    23                 //append Label row with line break
    24                 CSV += row + '
    ';
    25             }
    26 
    27             //1st loop is to extract each row
    28             for (var i = 0; i < arrData.length; i++) {
    29                 var row = "";
    30 
    31                 //2nd loop will extract each column and convert it in string comma-seprated
    32                 for (var index in arrData[i]) {
    33                     row += '"' + arrData[i][index] + '",';
    34                 }
    35 
    36                 row.slice(0, row.length - 1);
    37 
    38                 //add a line break after each row
    39                 CSV += row + '
    ';
    40             }
    41 
    42             if (CSV == '') {
    43                 alert("Invalid data");
    44                 return;
    45             }
    46 
    47             //Generate a file name
    48             var fileName = "";
    49             //this will remove the blank-spaces from the title and replace it with an underscore
    50             fileName += ReportTitle.replace(/ /g, "_");
    51 
    52             //Initialize file format you want csv or xls
    53             var uri = 'data:text/csv;charset=utf-8,uFEFF' + encodeURI(CSV);
    54 
    55             // Now the little tricky part.
    56             // you can use either>> window.open(uri);
    57             // but this will not work in some browsers
    58             // or you will not get the correct file extension    
    59 
    60             //this trick will generate a temp <a /> tag
    61             var link = document.createElement("a");
    62             link.href = uri;
    63 
    64             //set the visibility hidden so it will not effect on your web-layout
    65             link.style = "visibility:hidden";
    66             link.download = fileName + ".csv";
    67 
    68             //this part will append the anchor tag and remove it after automatic click
    69             document.body.appendChild(link);
    70             link.click();
    71             document.body.removeChild(link);
    72         }
  • 相关阅读:
    sql server 行转列
    java 加密解密WORD文档
    数据库重新连接存储
    MSSQL 删除索引
    WORD添加批注(JAVA)
    JAVA添加WORD文档批注
    MYECLIPSE说明书
    K3二次开发后台表
    css css预处理器
    javascript 视频播放指定的时间段
  • 原文地址:https://www.cnblogs.com/sword-successful/p/4380861.html
Copyright © 2020-2023  润新知