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

在Windows中将cp1252大容量转换为utf-8,utf-8,cygwin,cp1252,Utf 8,Cygwin,Cp1252,所以, 我一直在尝试在Windows中将一个大型java源代码树从cp1252转换为UTF-8,具体使用我在网上找到的技巧和trix。问题是,我在Windows上;我不做VB;Cygwin的iconv没有使用-o开关 我第一次尝试使用的行是: find . -type f -print -exec iconv -f cp1252 -t utf-8 {} > {}.converted \; -exec mv {}.converted {} \; 这将在工作目录中创建一个文件{}.conve

所以, 我一直在尝试在Windows中将一个大型java源代码树从cp1252转换为UTF-8,具体使用我在网上找到的技巧和trix。问题是,我在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
虽然手动执行单个表达式非常有效

我尝试过随机引用,但似乎没有任何效果,我遗漏了什么?为什么它不起作用

Thanx提前,
Lars

我没有太多使用Cygwin,但我一直在使用一个“本机”windows版本的Iconv。下面是一个批处理文件的摘录,我使用它将sub-dir中的所有文件从HP-ROMAN8编码转换为UTF-8编码——将结果“./temp”放在原始文件下:

@set dir=原始

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

如果存在。\%dir%\temp( 擦除。\%dir%\temp*/Q @如果ERRORLEVEL 1(@echo无法擦除“temp”子目录中的所有文件 @走到尽头 ) )否则( mkdir.\%dir%\temp @如果ERRORLEVEL 1(@echo无法创建“temp”子目录 @走到尽头 ) )

对于(./%dir%/*.xml)中的%%f,请执行以下操作( %ICONV%-f HP-ROMAN8-t UTF-8“/%dir%/%f”>“/%dir%/temp/%f” 如果错误级别1(转到ICONV_错误)
)

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

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

第一次尝试中的错误是,在find启动之前,shell对重定向运算符“>”进行了评估

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


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

Thanx,这是按预期工作的!但是,您知道find exec表达式为什么不工作吗?这与输出重定向有关吗我不确定,但是
-exec
不是首选。从某个地方我了解到
-exec
不能执行有长参数的命令。我改用
xargs
find . -type f -print -exec sh -c 'iconv -f cp1252 -t utf-8 {} > {}.converted' \; -exec mv {}.converted {} \;