2012-03-13 69 views
3

所以, 我一直想一個大的Java源代碼樹從CP1252轉換爲UTF-8在Windows中,使用技巧和TRIX我在網上找到,specificly here。問題是,我在Windows上;我不做VB; Cygwin的iconv不採用-o開關。批量轉換CP1252爲UTF-8在Windows

我第一次嘗試使用該生產線是:

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

這在工作目錄下創建一個文件{}.converted和第二-exec失敗的原因很明顯。周圍的iconv表達

把報價:

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

resulsts在如下因素的錯誤:

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 

雖然手工執行的個人表現完美。

我已經試驗了隨機引用,但似乎沒有工作,我錯過了什麼?爲什麼它不工作..?

Thanx提前, 拉爾斯

回答

3
for f in `find . -type f`; do 
    iconv -f cp1252 -t utf-8 $f > $f.converted 
    mv $f.converted $f 
done 
+0

感謝名單,這按預期工作! 但是,你知道爲什麼find-exec表達式不起作用嗎?是否與輸出重定向有關? – Larsing 2012-03-14 08:29:23

+0

我不確定,但'-exec'不是首選。從我學習的地方'-exec'不能執行長參數的命令。我使用'xargs'代替。 – neevek 2012-03-14 11:45:20

0

我沒有使用Cygwin的非常多,但有一個語言Iconv的「原生」 Windows版本,我用所有的時間。下面是一個批處理文件的摘錄,我用它將子目錄中的所有文件從HP-ROMAN8編碼轉換爲UTF-8編碼 - 將結果'./temp「放在原始文件的下方:

@set DIR =原

@set ICONV = 「C:\ Program Files文件(x86)的\的iconv-1.9.2.win32 \ BIN \的iconv」

是否存在\%DIR%\ TEMP( 擦除。 \%DIR%\ TEMP * @if ERRORLEVEL 1(@echo無法從 「臨時」 子目錄 刪除所有文件@goto THE_END ) )其他( 的mkdir \%目錄。*/Q %\臨時 @if ERRORLEVEL 1(@echo無法創建 「TEMP」 子目錄 @goto THE_END ) )

爲%% F IN(./%dir%/*.xml)做( % ICONV%-f HP-ROMAN8 -t UTF-8 「./%dir%/%%f」> 「./%dir%/temp/%%f」 如果ERRORLEVEL 1(轉到ICONV_ERROR) )

+1

看到...這就是爲什麼我更喜歡unix one-liners ;-) – Larsing 2012-04-18 06:43:10

1

好吧,再次回答我自己的問題(這開始成爲一個壞習慣...)

所有雖然Neevek的解決方案沒有錯,完美主義者在我想要得到th e找到-exec表達式的權利。包裹在一個sh -c '...'中的iconv聲明不招:

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

儘管如此,爲什麼會出現使用查找-exec語句I/O重定向問題的基本問題仍然沒有得到解決......