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

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

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

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

目前最好的解决scheme:

在Linux / UNIX / OS X / cygwin上:

  • 由Troels Arvinbuild议的Gnu iconv最适合用作filter 。 这似乎是普遍可用的。 例:

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

    正如Ben所指出的那样,有一个使用iconv的在线转换器 。

  • 由Cheekysoftbuild议的Gnu recode ( 手动 )将转换一个或几个文件到位 。 例:

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

    这个使用较短的别名:

     $ recode utf8..l9 in.txt 

    Recode还支持可用于在不同行结束types和编码之间转换的表面

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

     $ recode ../CR-LF in.txt 

    Base64编码文件:

     $ recode ../Base64 in.txt 

    你也可以把它们组合起来。

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

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

在与Powershell ( Jay Bazuzi )的Windows上:

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

    (尽pipe没有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”。

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

独立的实用程序方法

 iconv -f UTF-8 -t ISO-8859-1 in.txt > out.txt 
 -f编码input的编码
 -t编码输出的编码

尝试VIM

如果你有vim你可以使用这个:

没有testing每个编码。

关于这个很酷的部分是你不必知道源代码

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

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


说明部分!

  1. + :vim在打开文件时直接input命令。 Usualy用于在特定行打开文件: vim +14 file.txt
  2. | :多个命令的分隔符(如;在bash中)
  3. set nobomb :no utf-8 BOM
  4. set fenc=utf8 :设置新的编码为utf-8 doc链接
  5. x :保存并closures文件
  6. filename.txtfilename.txtpath
  7. " :由于pipe道,qotes在这里(否则bash将使用它们作为bashpipe道)

在Linux下,您可以使用非常强大的recode命令尝试在不同的字符集之间进行转换,以及任何行结束问题。 recode -l会显示工具之间可以转换的所有格式和编码。 这可能是一个很长的名单。

的iconv(1)

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

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

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

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

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

试试iconv Bashfunction

我已经把这个成.bashrc

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

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

 utf8 MyClass.java 

尝试记事本++

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

PHP iconv()

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

Oneliner使用find,具有自动检测function

所有匹配文本文件的字符编码 会自动检测到 ,所有匹配的文本文件都会转换为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" 。 在这之间, utf-8输出文件被临时命名为converted

由此, file -bi意味着:

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

  • – 我, – 我
    使文件命令输出MIMEtypesstring,而不是传统的人类可读的string。 因此,它可能会说'文字/平原' charset = us-ascii“而不是”ASCII文本“。

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

点击这里查找更多 。

编写属性文件(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)时,问题就完成了。

我希望这可以帮助别人。

DOS / Windows:使用代码页

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

可以使用chcp命令来更改代码页。 代码页65001是UTF-8的Microsoft名称。 设置好代码页后,前面的命令产生的输出将是代码页的设置。

Yudit编辑器支持和转换许多不同的文本编码,在Linux,Windows,Mac等上运行。

-亚当

正如我如何更正文件的字符编码? Synalyze它! 可让您轻松地在OS X 库所支持的所有编码之间进行转换。

另外,您可以显示从所有编码转换为Unicode的文件的一些字节,以快速查看哪个文件是正确的。