1

我们机构大约有 28000 篇文章,它们的编码不是 utf-8。我被要求找到一种将它们的编码更改为 utf-8 的方法。是否有任何 linux 或 windows 命令可以在不打开文件的情况下更改文件的编码?显然,打开 28000 个文件并逐个更改它们不是一个好主意!

4

2 回答 2

7

iconv可用于将文本文件从一种编码转换为另一种编码。大多数 linux 发行版都应该有它——通常作为glibc; 如果没有,则作为单独的可安装包。

因此,如果它们是 Latin-1 (ISO-8859-1),您可以执行以下操作:

$ iconv -f ISO-8859-1 -t UTF-8 foo.txt >foo-utf8.txt

您可以将其包装在一个单行中find,例如:

$ tmpdir=$(mktemp -d -t $tempXXXXXX); find . -type f -exec iconv -f ISO-8859-1 -t UTF-8 {} >${tmpdir}/temp \; -exec mv ${tmpdir}/temp {} \; ; rmdir ${tmpdir}

但是您可能可以在六行 bash/python/perl/whatever 中使其更具可读性和健壮性。

于 2013-10-06T07:00:39.023 回答
0

您可以使用基本的 shell 命令轻松更改文件的编码。

$filesDir = Get-ChildItem "D:\Code"
$OutputDir="D:\programability\"
for ($j=0; $j -lt $filesDir.Count; $j++)
{
$SubDir=$filesDir[$j].FullName
[system.io.directory]::CreateDirectory($OutputDir+$filesDir[$j].name)
$files = Get-ChildItem $SubDir
for ($i=0; $i -lt $files.Count; $i++) {
    $outfile = $OutputDir+$filesDir[$j].name+"\"+$files[$i].name 
     $files[$i].name    
    Get-Content $files[$i].FullName | Set-Content -Encoding UTF8 $outfile
}
}

这会将文件编码更改为 UTF-8,包括子文件夹中的文件

于 2017-08-01T07:08:13.713 回答