4

これが私のケースです。多くのファイルを含む非常に大きなプロジェクトで作業しています。これらのファイルの一部は 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」フォルダーのみを介して実行されています。このフォルダー内にあるフォルダー内に移動して、そこでも実行する簡単な方法をまだ考えています。

4

1 に答える 1

2

UTF-8 ファイルにバイト オーダー マークはありますか? その場合、最初の 3 バイトの値を確認するだけで、ファイルが UTF-8 かどうかを判断できます。それ以外の場合、標準的な方法は、ファイルが合法的な UTF-8 であるかどうかをチェックすることです。

于 2011-05-22T01:00:30.287 に答える