Есть ли способ проверить кодировку файла с помощью JavaScript? - PullRequest
4 голосов
/ 20 мая 2011

Вот мой случай: я работаю с очень большим проектом, который содержит много файлов. Некоторые из этих файлов кодируются в UTF-8, другие в ANSI. Нам нужно конвертировать все файлы в UTF-8, потому что мы решили, что это будет по умолчанию в наших следующих проектах. Это большая проблема, потому что мы бразильцы, и у нас есть общие слова, использующие такие символы, как á, ç, ê, ü и т. Д. Поэтому наличие нескольких файлов в нескольких кодировках charset создает серьезную проблему.

В любом случае, я пришел к этому файлу JS, который преобразует файлы ANSI в UTF-8, копируя их в другую папку и сохраняя оригиналы:

var indir = "in";
var outdir = "out";
function ansiToUtf8(fin, fout) {
    var ansi = WScript.CreateObject("ADODB.Stream");
    ansi.Open();
    ansi.Charset = "x-ansi";
    ansi.LoadFromFile(fin);
    var utf8 = WScript.CreateObject("ADODB.Stream");
    utf8.Open();
    utf8.Charset = "UTF-8";
    utf8.WriteText(ansi.ReadText());
    utf8.SaveToFile(fout, 2 /*adSaveCreateOverWrite*/);
    ansi.Close();
    utf8.Close();
}
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var folder = fso.GetFolder(indir);
var fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext()) {
    var file = fc.item();
    ansiToUtf8(indir+"\\"+file.name, outdir+"\\"+file.name);
}

который я запускаю, используя это в командной строке

cscript / Nologo ansi2utf8.js

Проблема в том, что этот скрипт запускает все файлы, даже те, которые уже есть в UTF-8, и это приводит к поломке моих специальных символов. Поэтому мне нужно проверить, соответствует ли кодировка файла UTF-8, и запускать мой код, только если это ANSI. Как я могу это сделать?

Кроме того, мой скрипт запускается только через папку «in». Я все еще думаю о том, как сделать так, чтобы он заходил в папки, которые находятся в этой папке, и запускался там.

1 Ответ

2 голосов
/ 22 мая 2011

Есть ли у ваших файлов UTF-8 метка порядка следования байтов?В этом случае вы можете просто проверить значение первых 3 байтов, чтобы определить, являются ли файлы UTF-8 или нет.В противном случае стандартный метод заключается в проверке, является ли файл допустимым UTF-8 на всем протяжении, если это так, то, скорее всего, его следует считать UTF-8.

...