在字符集之间转换文本文件的最佳方法?

时间:2008-09-15 17:21:31

标签: text unicode utf-8 character-set

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

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

一切顺利:您喜爱的脚本语言,命令行工具或其他OS,网站等实用程序的单行程序。

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

在Linux / UNIX / OS X / cygwin上:

  • iconv建议的Gnu Troels Arvin最好用作为过滤器。它似乎普遍可用。例如:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    正如Ben所指出,有一个online converter using iconv

  • recode建议的Gnu manualCheekysoft)会将一个或多个文件转换为。例如:

    $ recode UTF8..ISO-8859-15 in.txt
    

    这个使用较短的别名:

    $ recode utf8..l9 in.txt
    

    Recode还支持表面,可用于在不同的行结束类型和编码之间进行转换:

    将换行符从LF(Unix)转换为CR-LF(DOS):

    $ recode ../CR-LF in.txt
    

    Base64编码文件:

    $ recode ../Base64 in.txt
    

    您也可以将它们组合在一起。

    将带有Unix行尾的Base64编码的UTF8文件转换为带有Dos行结尾的Base64编码的Latin 1文件:

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

在具有PowershellJay Bazuzi)的Windows上:

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (不支持ISO-8859-15;它表示支持的字符集是unicode,utf7,utf8,utf32,ascii,bigendianunicode,default和oem。)

修改

你的意思是iso-8859-1支持吗?使用“String”可以做到这一点反之亦然

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

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

21 个答案:

答案 0 :(得分:220)

Stand-alone utility方法

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。

答案 1 :(得分:80)

尝试VIM

如果你有vim,你可以使用它:

未针对每种编码进行测试。

关于这一点很酷的部分是你不必知道源编码

vim +"set nobomb | set fenc=utf8 | x" filename.txt

请注意,此命令直接修改文件

解释部分!

  1. +:vim用于在打开文件时直接输入命令。 Usualy用于在特定行打开文件:vim +14 file.txt
  2. |:多个命令的分隔符(如bash中的;
  3. set nobomb:没有utf-8 BOM
  4. set fenc=utf8:将新编码设置为utf-8 doc link
  5. x:保存并关闭文件
  6. filename.txt:文件路径
  7. ":由于管道,qotes在这里。 (否则bash会将它们用作bash管道)

答案 2 :(得分:36)

在Linux下,您可以使用非常强大的重新编码命令尝试在不同的字符集之间进行转换以及任何行结束问题。 recode -l <​​/ strong>会显示该工具可以转换的所有格式和编码。它可能是一个非常长的列表。

答案 3 :(得分:20)

iconv(1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt

还有许多语言的基于iconv的工具。

答案 4 :(得分:19)

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

答案 5 :(得分:16)

尝试iconv Bash功能

我已将其放入.bashrc

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

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

utf8 MyClass.java

答案 6 :(得分:13)

试试Notepad ++

在Windows上,我可以使用Notepad ++进行从 ISO-8859-1 UTF-8 的转换。点击"Encoding",然后点击"Convert to UTF-8"

答案 7 :(得分:9)

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

要执行这些步骤,子shell sh-exec一起使用,运行带有-c标志的单行,并将文件名作为位置参数{{1与"$1"一起使用。在这两者之间,-- {}输出文件暂时命名为utf-8

其中file -bi表示:

  • -b, - brief
    不要将文件名添加到输出行(简要模式)。

  • -i, - mime
    使file命令输出mime类型字符串,而不是更传统的人类可读字符串。因此它可能会说'text / plain; charset = us-ascii'而不是“ASCII text”。

converted命令对于此类文件管理自动化非常有用。

点击此处查看more find galore

答案 8 :(得分:3)

PHP iconv()

iconv("UTF-8", "ISO-8859-15", $input);

答案 9 :(得分:2)

DOS / Windows:使用Code page

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

命令chcp可用于更改代码页。代码页65001是UTF-8的Microsoft名称。设置代码页后,以下命令生成的输出将为代码页设置。

答案 10 :(得分:1)

假设您不知道输入编码,但仍然希望自动化大多数转换,我总结了以前的答案就得出了一个衬里的结论。

iconv -f $(chardetect input.text | awk '{print $2}') -t utf-8 -o output.text

答案 11 :(得分:1)

在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://docs.microsoft.com/en-us/dotnet/api/system.text.encoding

答案 12 :(得分:1)

尝试使用EncodingChecker

EncodingChecker on github

文件编码检查器是一种GUI工具,可让您验证一个或多个文件的文本编码。该工具可以显示所有选定文件的编码,或仅显示没有指定编码的文件。

文件编码检查器需要.NET 4或更高版本才能运行。

对于编码检测,文件编码检查器使用UtfUnknown Charset Detector库。启发式可以检测到不带字节顺序标记(BOM)的UTF-16文本文件。

enter image description here

答案 13 :(得分:1)

写属性文件(Java)通常我在linux(mint和ubuntu发行版)中使用它:

$ native2ascii filename.properties

例如:

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

PS:我在portugues中强制执行第一/第二行以强制使用特殊字符。

就我而言,在第一次执行时,我收到了这条消息:

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: sudo apt install <selected package>

当我安装第一个选项(gcj-5-jdk)时,问题就完成了。

我希望这有助于某人。

答案 14 :(得分:0)

使用以下Python脚本:https://github.com/goerz/convert_encoding.py 在任何平台上均可使用。需要Python 2.7。

答案 15 :(得分:0)

我最喜欢的工具是Jedit(基于Java的文本编辑器),它具有两个非常方便的功能:

  • 使用户可以使用不同的编码重新加载文本(并因此可以直观地控制结果)
  • 另一种使用户能够在保存之前明确选择编码(和行尾)的方法

答案 16 :(得分:0)

只需在状态栏右侧(底部)指示当前字符集的状态下,在IntelliJ IDEA IDE中更改已加载文件的编码。它提示重新加载或转换,请使用转换。确保事先备份了原始文件。

答案 17 :(得分:0)

如果使用macOS GUI应用程序是麻烦的话,SubEthaEdit是我通常用于编码处理的文本编辑器-其“转换预览”可让您查看输出编码中的所有无效字符,并进行修复/删除它们。

现在是open-source,所以对他们来说是?。

答案 18 :(得分:0)

使用红宝石:

ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"

来源:https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

答案 19 :(得分:0)

还有一个网络工具可以转换文件编码:https://webtool.cloud/change-file-encoding

它支持多种编码,包括一些罕见的编码,例如IBM代码页37。

答案 20 :(得分:-1)

How do I correct the character encoding of a file? Synalyze It!所述,您可以在ICU library支持的所有编码之间轻松转换OS X.

此外,您可以显示从所有编码转换为Unicode的文件的某些字节,以快速查看哪个是适合您文件的文件。