【发布时间】:2011-08-29 17:56:19
【问题描述】:
这是我的情况:我正在处理一个包含大量文件的非常大的项目。其中一些文件以 UTF-8 编码,另一些以 ANSI 编码。我们需要将所有文件转换为 UTF-8,因为我们决定这将是我们下一个项目的默认设置。 这是一个很大的问题,因为我们是巴西人,我们在常用词中使用 á、ç、ê、ü 等字符。因此,在多个字符集编码中包含多个文件会产生严重的问题。
无论如何,我来到了这个将ANSI文件转换为UTF-8的JS文件,将它们复制到另一个文件夹并保留原件:
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”文件夹运行。我仍在考虑以一种简单的方式让它进入该文件夹中的文件夹并在那里运行。
【问题讨论】:
-
你在什么环境下做这个?我的第一个想法是 JS 可能不适合这里的工作。
-
我使用的是 Windows 7,我使用 PHP/JavaScript 编写代码。我不知道这是否可以使用另一种编程语言来重现,但事实并非如此,因为我可能不知道该怎么做。
-
如果你做PHP,可以考虑mbstring库:php.net/manual/en/book.mbstring.php
标签: javascript utf-8 character-encoding encode ansi