因此,我一直在尝试使用我在网上找到的技巧和trix,特别是here,在Windows中将一个大型的java源码树从cp1252转换为UTF-8。问题是,我使用的是Windows;我不使用VB;Cygwin的iconv没有使用-o开关。
我第一次尝试使用的代码行是:
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 {} \;导致以下错误:
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尽管手工执行单个表达式的效果很好。
我已经尝试了随机引用,但似乎什么都不起作用,我错过了什么?为什么它不工作..?
提前谢谢你,拉斯
发布于 2012-03-14 00:08:29
for f in `find . -type f`; do
    iconv -f cp1252 -t utf-8 $f > $f.converted
    mv $f.converted $f
done发布于 2012-03-14 16:56:50
好了,再次回答我自己的问题(这开始成为一种坏习惯……)
尽管Neevek的解决方案没有什么问题,但我内心的完美主义者希望find -exec表达式是正确的。将iconv语句包装在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-14 00:10:06
我不经常使用Cygwin,但有一个我一直在使用的“原生”windows版本的Iconv。下面是一个批处理文件的摘录,我使用该文件将子目录中的所有文件从HP-ROMAN8编码转换为UTF-8编码--将结果‘./temp’放在原始文件下:
@设置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 Unable to erase the "temp“子目录@goto THE_END )) else ( mkdir .\%dir%\temp @if ERRORLEVEL 1 (@echo Unable to create the "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) )
https://stackoverflow.com/questions/9687594
复制相似问题