zoukankan      html  css  js  c++  java
  • Atitit node.js问题解决总结t99 目录 1.1. 找不到node程序 1 1.2. GBK编码问题 1 2. 按行读取gbk编码问题 2 2.1. 先写入txt utf8 encode

    Atitit node.js问题解决总结t99

     

    目录

    1.1. 找不到node程序 1

    1.2. GBK编码问题 1

    2. 按行读取gbk编码问题 2

    2.1. 先写入txt utf8 encode..then use path mode 2

    2.2. NodeJS笔记:处理非utf8编码 2

     

     

      1. 找不到node程序

     

    {

        // Use IntelliSense to learn about possible attributes.

        // Hover to view descriptions of existing attributes.

        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

        "version""0.2.0",

        "configurations": [

            {

                "type""node",

                "request""launch",

                "name""Launch Program",

                "program""${workspaceFolder}\dataindexGener,.js",

                "runtimeExecutable":"C:\progrm\nodejs\node.exe"

            }

        ]

    }

     

      1. GBK编码问题

     

    node当使用node获取GBK编码的数据时,nodejs只支持utf-8,node没有提供转换编码的原生支持,有倒是有一个模块iconv能干这个事,但需要本地方法,VC++库的支持。国外有个大牛写了一个纯粹用Javascript解码的模块:iconv-lite,可以实现编码转换,使用方法如下

    ————————————————

    var fsrequire('fs'); 

    var data = fs.readFileSync(path.pathfull); 

     

    //var gbk_to_utf8 = new Iconv('GBK', 'UTF8');

    //var buffer = gbk_to_utf8.convert(fs.readFileSync('path/to/gbkencodefile'));

    //console.log(buffer.toString());

    var iconv = require("iconv-lite");

    data = iconv.decode(data'GBK');

    console.log(data);

    1. 按行读取gbk编码问题
      1. 先写入txt utf8 encode..then use path mode

    没办法,不能直接从txt到读取line

    dir = "C:\00";

    Files = require("./sdk/io/Files.js");

     

    console.log(dir)

    var fs = require('fs');

     

    Files.walkFileTree(dirfunction (path) {

     

       console.log(path)

     

       console.log('--------开始读取文件--------');

     

       var data = fs.readFileSync(path.pathfull);

     

       //var gbk_to_utf8 = new Iconv('GBK', 'UTF8');

       //var buffer = gbk_to_utf8.convert(fs.readFileSync('path/to/gbkencodefile'));

       //console.log(buffer.toString());

       var iconv = require("iconv-lite");

       data = iconv.decode(data'GBK');

       //console.log(data);

     

       newLocal = 'c:\000tmp\' + path.filename;

       fs.writeFileSync(newLocaldata);

     

       FileUtils = require("./sdk/io/FileUtils.js");

       FileUtils.readLinesFromtxt(newLocalfunction (list) {

          var newdir = 'c:\000tmp\' + path.filename + "Fld"

     

          try { fs.mkdirSync(newdir); } catch (e) { }

     

          console.log(list);

     

          for (line of list) {

             var pathM = require('path');

             var basename = pathM.basename(line)

             var lineFileName = newdir + "\" + basename + ".txt"

             try {

                fs.writeFileSync(lineFileNameline);

             } catch (error) {

     

             }

     

             //  console.log(key);

          }

       });

     

    })

     

      1. NodeJS笔记:处理非utf8编码

        最近研究了下nodejs读写GBK文件的方法,nodejs原生的API接口如

    fs.readFile(filename,[encoding],[callback])

    其encoding参数是不支持gbk的。实际上,如果不传encoding参数,返回的结果是一个Buffer类型的对象;如果传入参数,返回的是buffer.toString(encoding)的结果,也就是对一个buffer编码的结果。纯Javascript是Unicode友好的但对于处理二进制数据并不合适。Buffer对象就是为了解决这个问题,我理解Buffer为固定长度的字节数组。现在已经知道encoding参数实际上是交给Buffer.toString方法来处理的。希望Buffer.toString在不久的将来也能原生支持gbk编码。从字节流转换到特定的一种字符编码,我想这应该只是时间问题。

     

        虽然nodejs API不支持GBK字符串,但 iconv 这个nodejs插件模块却提供了类似的功能。来看看它的示例:

    var gbk_to_utf8 = new Iconv('GBK', 'UTF8');

    var buffer = gbk_to_utf8.convert(fs.readFileSync('path/to/gbkencodefile'));

    console.log(buffer.toString());

       构造函数接收两个encoding参数,标识编码转换规则。Iconv实例的convert方法接收一个buffer参数,按Iconv实例的规则进行转换。一般来说,只有buffer里的字节数组能被Iconv实例的fromEncoding正确解码,才能转换到正确的targetEncoding。例如网页爬虫,得事先解析页面的头部,通过"Content-Type"或"charset"得到源编码,再构造一个从源编码到目标编码的Iconv实例,才能得到想要的正确编码的目标数据。因为Buffer.prototype.toString(encoding)不支持GBK,所以暂时还没办法把一个UTF8编码的网页下载下来编码成GBK字符串写入DB或者输出到控制台。Javascript里的字符串只支持UTF8编码,Iconv只在Buffer层做编码转换。

     

  • 相关阅读:
    FTP文件传输应用分析
    A*寻路算法
    Asp.net页面事件引发后台程序处理原理
    开发人员的基本原则(转)
    定位new表达式
    常量对象的动态分配和释放
    PostThreadMessage使用
    最美丽的数学公式
    仿函数
    CF1598EStaircases【计数】
  • 原文地址:https://www.cnblogs.com/attilax/p/15197047.html
Copyright © 2011-2022 走看看