使用 find 的单行代码,具有自动检测功能

使用 find 的单行代码,具有自动检测功能

如何使用命令或工具批量转换目录中文件的编码(例如 ANSI → UTF-8)?

对于单个文件,编辑器可以提供帮助,但是我该如何处理大量文件呢?

答案1

赛格威或者操作系统提供 Unix 工具,如iconvdos2unix(和unix2dos)。在 Unix/Linux/Cygwin 下,您需要使用“windows-1252”作为编码,而不是 ANSI(见下文)。(除非您知道您的系统使用 1252 以外的代码页作为其默认代码页,在这种情况下您需要告诉图标要翻译的正确代码页。

使用以下方法将一个 ( -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 编码(因此通常是用于文本文件的编码)。

他链接的页面提供了这个历史花絮(引自微软 PDF)关于 CP 1252 和 ISO-8859-1(另一种经常使用的编码)的起源:

[...] 这是因为 Windows 代码页 1252 最初基于 ANSI 草案,后来成为 ISO 标准 8859-1。然而,在向 ISO 标准中为控制代码保留的范围添加代码点时,Windows 代码页 1252 和随后最初基于 ISO 8859-x 系列的 Windows 代码页偏离了 ISO。时至今日,微软内部和外部的开发社区经常将 8859-1 代码页与 Windows 1252 混淆,并且会使用“ANSI”或“A”来表示 Windows 代码页支持。

答案2

电源外壳你可以做这样的事情:

Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt

尽管电子海图就像统一码ASCIIutf8, 和utf32. 查看‘帮助文件’。

要将目录中的所有 *.txt 文件转换为 UTF-8,请执行以下操作:

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
}

答案3

使用 find 的单行代码,具有自动检测功能

字符编码所有匹配的文本文件被自动检测所有匹配的文本文件都将转换为 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要执行这些步骤,需要使用子 shell -exec,使用 标志运行一行代码-c,并使用 传递文件名作为位置参数"$1"-- {}在此期间,UTF-8 输出文件临时命名为converted

find命令对于这种文件管理自动化非常有用。

点击此处更多find

答案4

UTFCast是一款适用于 Windows 的 Unicode 转换器,支持批处理模式。我使用的是付费版本,使用起来很舒服。

UTFCast 是一款 Unicode 转换器,只需单击鼠标即可将所有文本文件批量转换为 UTF 编码。您可以使用它将一个目录下的文本文件转换为 UTF 编码(包括 UTF-8、UTF-16 和 UTF-32)并输出到输出目录,同时保留原始文件的目录结构。即使您的文本文件具有不同的扩展名,UTFCast 也可以自动检测文本文件并进行转换。

相关内容