如何修复.gs脚本中的字符集问题?

时间:2013-11-14 11:30:56

标签: utf-8 character-encoding google-apps-script

我遇到charsets问题。

我在google-app-engine中解析了一个csv文件,我正在发布到uiapp表。 但是我检查了像áéíóú这样的特殊字符并且没​​有很好地显示(?方形符号)。

当我设置我的代码时,我写了导入google docs文档的字符串并且它的工作原理相同。

请一些建议吗?

我搜索:

  • 代码的全局字符集定义。或
  • 字符串变换,使字符看起来像我想要的那样。 (避免使用html &number定义。
  • 这是否与blob对象有关?

重要的是我来自西班牙,我们需要这样的角色。

app that get's a csv ';' delimited file and shows it's content

我发布了所有代码,它几乎不是给出的教程。

function arreglaUrl(cadena){
  var texto = cadena[cadena.length - 2]
  if (texto == ''){
    cadena[cadena.length - 2] = 'Sin enlace';
  }
  else{
    cadena[cadena.length - 2] = '<center><a href=\"'+ texto + '\">Link.</a></center>' ;
  };

}

function parsedCSV(){

  var listaArchivos = DocsList.getFolderById('XXXXX').getFiles()

  for (var i = 0; i < listaArchivos.length; i++) {
    if (listaArchivos[i].getName() == 'baul.csv'){
      var origen = listaArchivos[i];
      };
  } 
  var texto = origen.getContentAsString();
  var arra = Utilities.parseCsv(texto,";");
  return(arra);
}



function doGet() {

  var datos = parsedCSV()


  var baul = Charts.newDataTable()
    for (i = 0; i < datos[0].length; i++){

        baul.addColumn(Charts.ColumnType.STRING, datos[0][i])   
    }

    for (i = 1; i < datos.length; i++){
      arreglaUrl(datos[i]) // this only makes some html i need to post some links
      baul.addRow(datos[i])

     }
    baul.build();



  var sectorFilter = Charts.newCategoryFilter()
      .setFilterColumnLabel("sector")
      .build();

  var tipoFilter = Charts.newCategoryFilter()
      .setFilterColumnLabel("tipo")
      .build();
  var searchFilter = Charts.newStringFilter()
      .setFilterColumnLabel("Titulo")
      .build();
  var searchDesc = Charts.newStringFilter()
      .setFilterColumnLabel("descripcion")
      .build();


  var tableChart = Charts.newTableChart().setOption('allowHtml', true).setDimensions(0,0)
      .build();

    var dashboard = Charts.newDashboardPanel()
      .setDataTable(baul)
      .bind([sectorFilter, tipoFilter, searchFilter, searchDesc], [tableChart])
      .build();

  var uiApp = UiApp.createApplication().setTitle('Baul de Recursos');
  var anchoTotal = '100%';
  dashboard.add(uiApp.createVerticalPanel()

                .add(uiApp.createHorizontalPanel()
                     .add(sectorFilter)
                     .add(tipoFilter)
                     .setSpacing(15)

                    )

                .add(uiApp.createHorizontalPanel()        
                     .add(searchFilter)
                     .add(searchDesc)
                     .setSpacing(15)                
                    )

                    .add(uiApp.createHorizontalPanel()
                         .add(tableChart).setBorderWidth(1).setHorizontalAlignment(UiApp.HorizontalAlignment.CENTER).setWidth(anchoTotal)
                        )

                );

  uiApp.add(dashboard);
  return uiApp;
}

1 个答案:

答案 0 :(得分:4)

我发现它,我们需要先用Blob对象获取文件的内容。 这个函数是我用来将一些csv信息解析成数组的函数:

function parsedCSV(){

 //searching the file. This gets only one file in var origen
  var listaArchivos = DocsList.getFolderById('XXXXXXX').getFiles()

  for (var i = 0; i < listaArchivos.length; i++) {
    if (listaArchivos[i].getName() == 'baul.csv'){
      var origen = listaArchivos[i];
  };
}

// HERE IS THE GOOD DEFINITION OF CHAR:
var texto2= origen.getBlob().getDataAsString('ISO-8859-1');
// I put all the corrected text in an array

var arra = Utilities.parseCsv(texto2,";");
return(arra);
}

这是已解决的问题:https://script.google.com/macros/s/AKfycbyHa-bLWBHBr3qifbvzxecqGgGUYX8mhyo-TKoyfGvy/exec

诀窍:

var textVariableName = fileObjectVariableName.getBlob().getDataAsString('ISO-8859-1');