在Windows中将cp1252大容量转换为utf-8



因此,我一直在尝试在Windows中将一个大型java源代码树从cp1252转换为UTF-8,使用我在网上找到的技巧和矩阵,特别是在这里。问题是,我在Windows上;我不学VB;Cygwin的图标不接受-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

尽管用手执行各个表情效果很好。

我尝试过随机引用,但似乎什么都不起作用,我缺少什么?为什么它不起作用。。?

提前Thanx,Lars

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

好吧,再次回答我自己的问题(这开始成为一个坏习惯…)

尽管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重定向会出现问题的根本问题仍然没有解决。。。

我不怎么使用Cygwin,但我一直在使用Iconv的"原生"windows版本。以下是一个批处理文件的摘录,我使用该文件将子目录中的所有文件从HP-ROMAN8编码转换为UTF-8编码——输入结果/原件下方的"temp":

@set dir=原始

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

如果EXIST.\%目录%\temp(擦除。\%目录%\temp*.*/Q@if ERRORLEVEL 1(@echo无法从"temp"子目录中删除所有文件@转到THE_END))其他(mkdir.\%目录%\temp@if ERRORLEVEL 1(@echo无法创建"temp"子目录@转到THE_END))

对于%%f IN(./%dir%/*.xml)执行(%ICONV%-f HP-ROMAN8-t UTF-8"./%dir%/%%f">"./%dir%/temp/%f"如果ERRORLEVEL 1(转到ICONV_ERROR))

第一次尝试中的错误是,在find开始之前,shell对重定向运算符'>'进行了评估。

第二次尝试中的错误是,单引号之间的文本被解释为要由find执行的命令的名称,但该名称并不存在。

在您的工作解决方案中,find执行的第一个命令是一个subshell,选项用单引号括起来,因此它们不是由外壳程序解释的,而是由subshell解释的。

最新更新