4

そのため、オンラインで見つけたヒントと trix を使用して、Windows で大きな Java ソース ツリーを cp1252 から UTF-8 に変換しようとしまし。問題は、私が Windows を使用していることです。私は VB をしません。-oCygwin の iconv は切り替えを行いません。

私が最初に使用しようとした行は次のとおりです。

find . -type f -print -exec iconv -f cp1252 -t utf-8 {} > {}.converted \; -exec mv {}.converted {} \;

{}.convertedこれにより、作業ディレクトリにファイルが作成され、2 つ目-execは明らかな理由で失敗します。

iconv 式を引用符で囲みます。

find . -type f -print -exec 'iconv -f cp1252 -t utf-8 {} > {}.converted' \; -exec mv {}.converted {} \;

次のエラーが発生します。

find: `iconv -f cp1252 -t utf-8 ./java/dv/framework/activity/model/ActivitiesMediaViewImpl.java > ./java/dv/framework/activity/model/ActivitiesMediaViewImpl.java.converted': No such file or directory

ただし、個々の式を手動で実行すると完全に機能します。

ランダムな引用を試してみましたが、何もうまくいかないようです。何が欠けていますか? なぜうまくいかないのでしょうか..?

前もって感謝します、ラース

4

4 に答える 4

3
for f in `find . -type f`; do
    iconv -f cp1252 -t utf-8 $f > $f.converted
    mv $f.converted $f
done
于 2012-03-13T16:08:29.177 に答える
1

よし、もう一度自分の質問に答える(これは悪い習慣になり始めている...)

Neevek のソリューションには何の問題もありませんが、私の完璧主義者は find -exec 式を正しくしたいと考えています。iconv ステートメントを a でラップすると、sh -c '...'うまくいきます。

find . -type f -print -exec sh -c 'iconv -f cp1252 -t utf-8 {} > {}.converted' \; -exec mv {}.converted {} \;

それでも、find -exec ステートメントで i/o リダイレクトを使用するとなぜ問題が発生するのかという根本的な問題は未解決のままです...

于 2012-03-14T08:56:50.277 に答える
0

私はCygwinをあまり使用していませんが、私がいつも使用しているIconvの「ネイティブ」Windowsバージョンがあります。これは、サブディレクトリ内のすべてのファイルをHP-ROMAN8エンコーディングからUTF-8エンコーディングに変換するために使用するバッチファイルからの抜粋です。結果「./temp」を元のファイルの下に置きます。

@set dir = original

@set ICONV = "C:\ Program Files(x86)\ iconv-1.9.2.win32 \ bin \ iconv"

if EXIST。\%dir%\ temp(erase。\%dir%\temp*。*/Q @if ERRORLEVEL 1(@echo"temp"サブディレクトリからすべてのファイルを消去できません@gotoTHE_END))else( mkdir。\%dir%\ temp @if ERRORLEVEL 1(@echo「temp」サブディレクトリを作成できません@goto THE_END))

for %% f IN(./%dir%/*.xml)do(%ICONV%-f HP-ROMAN8 -t UTF-8 "./%dir%/%% f">" ./%dir%/ temp / %% f "if ERRORLEVEL 1(goto ICONV_ERROR))

于 2012-03-13T16:10:06.257 に答える