这是我的情况:我正在处理一个包含大量文件的大项目。其中一些文件采用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'文件夹运行。我还在想一个简单的方法,让它进入这个文件夹中的文件夹并在那里运行。
答案 0 :(得分:2)
您的UTF-8文件是否有字节顺序标记?在这种情况下,您只需检查前3个字节的值,以确定文件是否为UTF-8。否则标准方法是检查文件是否一直是合法的UTF-8,如果是这样,它很可能被认为是UTF-8。