1

重複の可能性:
ファイルの一部のみが間違っているエンコーディング間でファイルを変換するにはどうすればよいですか?

次のコマンドを使用して、フォルダーから .srt ファイルを windows-1250 から utf-8 に変換します

for /f "delims=" %%a IN (' dir C:\utf_check\*.srt /b /s ') do %iconv% -s -f windows-1250 -t utf-8 < %%a > %%a.txt

しかし、私はこれに問題があります。ファイルがすでに utf-8 iconv である場合、ファイルが壊れて奇妙な文字が挿入されます。最初にutf-8かasciiかを検出してから変換する方法はありますか? Flip、enca、encov、recode を試してみましたが、成功しませんでした。

私はWindows 2003サーバーを使用しています.cygwinもインストールしました。

例: これは、utf-8の Aşezaţi-vă にあるテキストです。 これは、iconv が再びAĹźezaĹŁi-vÄ を変換した後のテキストです。

ありがとう

4

1 に答える 1

2

Windows-1250 エンコーディングの適切なテキストは、有効な utf-8 にはなりません。utf-8 の ASCII 範囲を超える文字を表すバイトは、意味をなさない Windows-1250 の文字のシーケンスに対応するためです。したがって、最初にファイルが有効な utf-8 であるかどうかを確認し、そうでない場合にのみ変換を行う必要があります。

変換を実行できない場合、iconv が (エラーレベル 1 で) 失敗するという事実を利用できます。したがって、最初に実行iconv -f utf-8 -t utf-8し、失敗した場合は実行しますiconv -f windows-1250 -t utf-8

これは、何かが utf-8 であるか従来のエンコーディングであるかを判断する場合にのみ機能しますが、有効な文字の範囲はすべてのウィンドウで同じかほとんど同じであるため、さまざまな従来のエンコーディングを区別できないことに注意してください。おそらくスペルチェッカーを含む、より高度なヒューリスティックを実行する必要があります。

于 2012-10-05T08:57:58.610 に答える