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 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 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!
jschardet https://github.com/aadsm / jschardet
node-chardet https://github.com/runk/node-chardet