有没有办法使用JavaScript检查文件编码?

4
这里是我的问题:我正在处理一个包含许多文件的大型项目。其中一些文件使用UTF-8编码,其他文件使用ANSI编码。我们需要将所有文件转换为UTF-8,因为我们决定在下一个项目中将其设为默认编码方式。
这是一个大问题,因为我们是巴西人,有很多常用单词中包含 á、ç、ê、ü 等字符。因此,多个文件使用不同的字符集编码会导致严重的问题。
无论如何,我找到了这个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
你在哪个环境下进行这个操作?我的第一个想法是,在这里使用JS可能不是正确的工具。 - Jeff Lambert
我使用Windows 7,并编写PHP/JavaScript代码。我不知道是否可以使用另一种编程语言来复制这个,但是实际情况并非如此,因为我可能不知道如何做到这一点。 - bitlamas
如果你使用PHP,可能要考虑使用mbstring库:http://www.php.net/manual/en/book.mbstring.php - Kekoa
1个回答

2

你的UTF-8文件是否有字节顺序标记?如果是这样,你可以简单地检查前3个字节的值来确定文件是否为UTF-8。否则,标准方法是检查文件是否完全符合合法的UTF-8格式,如果是,则很可能应该以UTF-8格式读取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接