如何使用命令或工具批量转换目录中的文件以进行编码(例如ANSI-> UTF-8)?
对于单个文件,编辑器可以提供帮助,但是如何执行海量文件工作呢?
如何使用命令或工具批量转换目录中的文件以进行编码(例如ANSI-> UTF-8)?
对于单个文件,编辑器可以提供帮助,但是如何执行海量文件工作呢?
Answers:
Cygwin或GnuWin32提供Unix工具,如iconv
和dos2unix
(和unix2dos
)。在Unix / Linux / Cygwin下,您将希望使用“ windows-1252”作为编码而不是ANSI(请参见下文)。(除非您知道系统使用默认代码页不是1252的代码页,否则您需要告诉iconv正确的代码页进行翻译。)
使用以下方法从一个(-f
)转换为另一个(-t
):
$ iconv -f windows-1252 -t utf-8 infile > outfile
或采用“一劳永逸”的形式:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
或者:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
在此站点上已多次问过此问题,因此这里有一些有关“ ANSI”的信息。在回答一个相关问题时,CesarB提到:
在Windows中有几种编码称为“ ANSI”。实际上, ANSI是用词不当。iconv无法猜测您想要哪个。
ANSI编码是Windows API中“ A”功能使用的编码(“ W”功能使用UTF-16)。它对应于哪种编码通常取决于您的Windows系统语言。最常见的是CP 1252(也称为Windows-1252)。因此,当您的编辑器说ANSI时,其含义是“无论API函数使用什么作为默认ANSI编码”,这是系统中使用的默认非Unicode编码(因此通常是用于文本文件的编码)。
他链接到的页面给出了CP 1252和ISO-8859-1(另一种常用的编码)的起源的历史花絮(从Microsoft PDF引用)。
[...]这是因为Windows代码页1252最初基于ANSI草案,该草案成为ISO标准8859-1。但是,在将代码点添加到ISO标准中为控制代码保留的范围时,Windows代码页1252和原始基于ISO 8859-x系列的后续Windows代码页与ISO有所不同。迄今为止,在Microsoft内部和外部都有开发社区将8859-1代码页与Windows 1252混淆,并看到用于表示Windows代码页支持的“ ANSI”或“ A”并不少见。 。
iconv
如果超出此大小,似乎会将文件截断为32,768字节。当他在尝试读取的文件中写入内容时,如果文件足够小,他会设法完成工作,否则他会在没有任何警告的情况下将其截断……
使用powershell,您可以执行以下操作:
% get-content IN.txt | out-file -encoding ENC -filepath OUT.txt
而ENC类似于unicode,ascii,utf8,utf32。签出“帮助文件”。
要将目录中的所有* .txt文件转换为utf8,请执行以下操作:
% foreach($i in ls -name DIR/*.txt) { \
get-content DIR/$i | \
out-file -encoding utf8 -filepath DIR2/$i \
}
会在DIR2中创建每个.txt文件的转换版本。
编辑:要替换所有子目录中的文件,请使用:
% foreach($i in ls -recurse -filter "*.java") {
$temp = get-content $i.fullname
out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
UTFCast是Windows的Unicode转换器,支持批处理模式。我使用的是付费版本,对此非常满意。
UTFCast是一个Unicode转换器,您可以通过单击鼠标将所有文本文件批量转换为UTF编码。您可以使用它将充满文本文件的目录转换为包括UTF-8,UTF-16和UTF-32在内的UTF编码到输出目录,同时保持原始文件的目录结构。您的文本文件是否具有不同的扩展名都没有关系,UTFCast可以自动检测文本文件并将其转换。
将自动检测所有匹配文本文件的字符编码,并将所有匹配文本文件转换为utf-8
编码:
$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;
要执行这些步骤,子壳sh
使用具有-exec
,运行一衬垫与所述-c
标志,并且使文件名作为位置参数"$1"
与-- {}
。在这两者之间,utf-8
输出文件被临时命名为converted
。
该find
命令对于这种文件管理自动化非常有用。
点击查看更多find
嘉豪。
iconv -f original_charset -t utf-8 originalfile > newfile
在for循环中运行以上命令。
使用此Python脚本:https : //github.com/goerz/convert_encoding.py它可在任何平台上运行。需要Python 2.7。