ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js ファイルのエンコード形式の変換手順の詳細な説明

Node.js ファイルのエンコード形式の変換手順の詳細な説明

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-15 10:53:501518ブラウズ

今回は、Node.jsファイルのエンコード形式を変換する手順と、Node.jsファイルのエンコード形式を変換するための注意事項について詳しく説明します。実際のケースを見てみましょう。

プロジェクトには UTF-8 形式ではない Lua ファイルが多数あり、EditPlus を使用して表示すると、ASCII として表示されます。以前にも書きましたが、BOM 付きのものもありますが、これには一定のルールがあります。

ASCII エンコードは面倒です。オンライン リソースを検索し、テストと比較を繰り返した結果、最終的に次のより信頼性の高い方法を思いつきました (一部の EditPlus ではエンコードが utf-8 であると示されていますが、node.js ライブラリは他のものを返します)。エンコーディング>_< ;)

変更が正しいかどうかを判断するには、変更後に SVN 経由で送信し、送信リストを参照して、送信するファイルをダブルクリックし、以下のダイアログ ボックスが表示された場合のみ必要です。変更が成功したことを意味し、それ以外はすべて表示されます 中国語になると文字化けします

var fs = require('fs');
var chardet = require('chardet');
var jschardet = require("jschardet");
var encoding = require("encoding");
var path = "lua目录";
function readDirectory(dirPath) {
  if (fs.existsSync(dirPath)) {
    var files = fs.readdirSync(dirPath);
    files.forEach(function (file) {
      var filePath = dirPath + "/" + file;
      var stats = fs.statSync(filePath);
      if (stats.isDirectory()) {
        // console.log('/n读取目录:\n', filePath, "\n");
        readDirectory(filePath);
      } else if (stats.isFile() && /\.lua$/.test(filePath)) {
        var buff = fs.readFileSync(filePath);
        if (buff.length && buff[0].toString(16).toLowerCase() == "ef" && buff[1].toString(16).toLowerCase() == "bb" && buff[2].toString(16).toLowerCase() == "bf") {
          //EF BB BF 239 187 191
          console.log('\n发现BOM文件:', filePath, "\n");
          buff = buff.slice(3);
          fs.writeFile(filePath, buff.toString(), "utf8");
        }
        // { encoding: 'UTF-8', confidence: 0.99 }
        // var charset = chardet.detectFileSync(filePath);
        var info = jschardet.detect(buff);
        if (info.encoding == "GB2312" || info.encoding == "ascii") {
          var resultBuffer = encoding.convert(buff, "UTF-8", info.encoding);
          fs.writeFile(filePath, resultBuffer, "utf8");
        }
        else if (info.encoding != "UTF-8" && chardet.detectFileSync(filePath) != "UTF-8")
        {
          if (buff.toString().indexOf("\r\n") > -1)
          {
            var resultBuffer = encoding.convert(buff, "UTF-8", "GBK");
            fs.writeFile(filePath, resultBuffer, "utf8");
          }
        }
      }
    });
  } else {
    console.log('Not Found Path : ', dirPath);
  }
}
readDirectory(path);
上記の判断に注意してください。 1つ目がGB2312またはASCIIの場合は、対応するエンコードを直接変換してください。 utf-8にします。そして返された形式が の場合、まず PC の下に改行があるかどうかを判断し、改行がある場合はすべて GBK として処理します。

全体のアイデアは実際には比較的単純です。難しいのは、ファイルのエンコード形式を判断することです。これは本当に難しいです>_使用されるサードパーティライブラリ:

encoding

https://

github.com/andris9/encoding

jschardet https://github.com/aadsm/jschardetnode-chardet https://github.com/ runk /node-chardet
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

PopupWindow コンポーネントの使用手順分析の Vue 実装


vue+jquery+lodash スライド時の上部フローティング固定関数の詳細な説明

以上がNode.js ファイルのエンコード形式の変換手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。