Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Schritte zur Konvertierung des Node.js-Dateikodierungsformats

Detaillierte Erläuterung der Schritte zur Konvertierung des Node.js-Dateikodierungsformats

php中世界最好的语言
php中世界最好的语言Original
2018-05-15 10:53:501470Durchsuche

Dieses Mal erkläre ich Ihnen ausführlich die Schritte zur Konvertierung des Node.js-Dateikodierungsformats und welche Vorsichtsmaßnahmen für die Konvertierung des Node.js-Dateikodierungsformats gelten Praktische Fälle, eins Steh auf und schau mal rein.

Es gibt viele Lua-Dateien in Projekten, die nicht im UTF-8-Format vorliegen. Bei der Anzeige mit EditPlus werden sie als ASCII angezeigt. Es gibt auch einige mit Stücklisten, die einfacher zu handhaben sind, darüber habe ich bereits geschrieben, und es gibt bestimmte Regeln.

ASCII-Kodierung ist eine Nervensäge. Nach der Suche nach Online-Ressourcen, wiederholten Tests und Vergleichen bin ich schließlich auf die folgende zuverlässigere Methode gekommen (einige EditPlus-Anzeigekodierungen sind utf-8, aber die node.js-Bibliothek). gibt etwas anderes zurück.

Um festzustellen, ob die Änderung korrekt ist, müssen Sie sie nach der Änderung nur über SVN einreichen, die Übermittlungsliste durchsuchen und auf eine beliebige zu übermittelnde Datei doppelklicken Das in der Abbildung unten gezeigte Dialogfeld wird angezeigt. Dies bedeutet, dass die Änderung erfolgreich war. Andere werden sehen, dass der chinesische Text verstümmelt wurde.

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);

Beachten Sie das oben Gesagte Wenn das erste eindeutig GB2312 oder ASCII ist, ändern Sie die entsprechende Konvertierungskodierung direkt in utf-8. Und wenn das zurückgegebene Format lautet, stellen Sie zunächst fest, ob sich unter dem PC ein Zeilenumbruchzeichen befindet, und behandeln Sie in diesem Fall alles als GBK für die Verarbeitung.

Die ganze Idee ist eigentlich relativ einfach. Die Schwierigkeit liegt in der Bestimmung des Dateikodierungsformats. Das ist wirklich schwierig>_

Hinweis: Die mit der oben genannten Methode geänderten Dateien stimmen mit der Liste der benötigten Dateien überein auf dem Mac eingereicht werden soll. Zumindest löst es das Problem, das ich derzeit habe. Wenn es etwas Besonderes gibt, können Sie den obigen Code ändern.

Verwendete Bibliotheken von Drittanbietern:

Encoding https://github.com/andris9/encoding
jschardet https://github.com/aadsm / jschardet
node-chardet https://github.com/runk/node-chardet

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie hier Weitere verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Analyse der Schritte zur Verwendung der PopupWindow-Komponente mit Vue

vue+jquery+lodash ist Beim Schieben oben aufgehängt und fixiert. Detaillierte Erläuterung der Funktionsimplementierung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zur Konvertierung des Node.js-Dateikodierungsformats. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn