在字符集之间转换文本文件的最快、最简单的工具或方法是什么?

具体来说,我需要从UTF-8转换为ISO-8859-15,反之亦然。

一切都可以:你最喜欢的脚本语言的一行程序,命令行工具或其他用于操作系统的实用程序,网站等等。

目前为止的最佳解决方案:

在 Linux/UNIX/OS X/cygwin 上:

Gnu iconv suggested by Troels Arvin is best used as a filter. It seems to be universally available. Example: $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt As pointed out by Ben, there is an online converter using iconv. recode (manual) suggested by Cheekysoft will convert one or several files in-place. Example: $ recode UTF8..ISO-8859-15 in.txt This one uses shorter aliases: $ recode utf8..l9 in.txt Recode also supports surfaces which can be used to convert between different line ending types and encodings: Convert newlines from LF (Unix) to CR-LF (DOS): $ recode ../CR-LF in.txt Base64 encode file: $ recode ../Base64 in.txt You can also combine them. Convert a Base64 encoded UTF8 file with Unix line endings to Base64 encoded Latin 1 file with Dos line endings: $ recode utf8/Base64..l1/CR-LF/Base64 file.txt

在Windows Powershell (Jay Bazuzi)上:

PS C:\> gc - zh utf8 in.txt | out - zh ascii out.txt

(但是没有ISO-8859-15支持;它说支持的字符集是unicode, utf7, utf8, utf32, ascii, bigendianunicode, default和oem。)

Edit

你是指iso-8859-1支持吗?使用"String"可以做到这一点,反之亦然

gc -en string in.txt | Out-File -en utf8 out.txt

注意:可能的枚举值是“Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii”。

CsCvt - Kalytta的字符集转换器是另一个伟大的基于命令行的Windows转换工具。


当前回答

试试iconv Bash函数

我把它放到。bashrc中:

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

..能够像这样转换文件:

utf8 MyClass.java

其他回答

Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

最短的版本,如果你可以假设输入的BOM是正确的:

gc FILE.TXT | Out-File -en utf7 file-utf7.txt

独立实用程序方法

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

您不必指定这两个参数中的任何一个。它们将默认使用您的当前语言环境,通常是UTF-8。

DOS/Windows:使用代码页

chcp 65001>NUL
type ascii.txt > unicode.txt

可以使用chcp命令修改代码页。代码页65001是UTF-8的微软名称。设置代码页后,以下命令生成的输出将是代码页集。

联机使用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"' -- {} \;

要执行这些步骤,sub shell sh和-exec一起使用,运行带有-c标志的一行程序,并使用——{}将文件名作为位置参数“$1”传递。在这两者之间,utf-8输出文件临时命名为convert。

file -bi表示:

- b,短暂的 不要在输出行前加上文件名(简单模式)。 我,mime 导致文件命令输出mime类型字符串,而不是更传统的人类可读字符串。例如,它可以说text/plain;charset=us-ascii而不是ASCII文本。sed命令按照iconv的要求将其仅切割为us-ascii。

find命令对于这样的文件管理自动化非常有用。 点击这里获取更多信息。

powershell:

function Recode($InCharset, $InFile, $OutCharset, $OutFile)  {
    # Read input file in the source encoding
    $Encoding = [System.Text.Encoding]::GetEncoding($InCharset)
    $Text = [System.IO.File]::ReadAllText($InFile, $Encoding)
    
    # Write output file in the destination encoding
    $Encoding = [System.Text.Encoding]::GetEncoding($OutCharset)    
    [System.IO.File]::WriteAllText($OutFile, $Text, $Encoding)
}

Recode Windows-1252 "$pwd\in.txt" utf8 "$pwd\out.txt" 

支持的编码名称列表:

https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding