Encoding 在shell编程中,如何在不打开文件的情况下更改文本文件的编码

Encoding 在shell编程中,如何在不打开文件的情况下更改文本文件的编码,encoding,utf-8,Encoding,Utf 8,我们机构大约有28000篇文章,它们的编码不是utf-8。我被要求找到一种方法将他们的编码改为utf-8。是否有任何linux或windows命令可以在不打开文件的情况下更改文件的编码?显然,打开28000个文件并逐个更改它们不是一个好主意 可用于将文本文件从一种编码转换为另一种编码。大多数linux发行版通常都应该将其作为glibc的一部分;如果没有,则作为单独的可安装包 因此,如果它们是拉丁语-1(ISO-8859-1),您可以这样做: $ iconv -f ISO-8859-1 -t UT

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

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

因此,如果它们是拉丁语-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使其更可读、更健壮。

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

因此,如果它们是拉丁语-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/随便什么的六行代码中,您可能会使它更可读、更健壮。

您可以使用基本的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,包括子文件夹中的文件

您可以使用基本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,包括子文件夹中的文件

如果您甚至不打开文件,您就无法读取数据,更不用说重写数据了……但我知道它们的编码是什么这不是编程问题,也不在这里讨论。“是否有任何linux或windows命令”是一个问题。投票迁移到那里。祝你好运。这是关于shell编程的,所以它是编程。你也知道所有你想重新编码的文件的内容,而不打开和读取这些文件?如果你甚至不打开文件,你就无法读取数据,更不用说重写了…但我知道它们的编码是什么这不是编程问题,在这里是离题的。“是否有任何linux或windows命令”是一个问题。投票迁移到那里。祝你好运。这是关于shell编程的,所以它是编程。你也知道你想重新编码的所有文件的内容,而不需要打开和读取这些文件?谢谢回复,我将测试你的解决方案并让你知道结果谢谢回复,我将测试你的解决方案并让你知道结果