it-swarm.cn

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

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

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

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

迄今为止的最佳解决方

在Linux/UNIX/OS X/cygwin上:

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

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

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

  • Gnu recodemanual )由 Cheekysoft建议 将转换 一个或多个文件到位 。例:

    $ 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
    

在带有 Powershell的Windows上Jay Bazuzi ):

  • 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”。

495
Antti Kissaniemi

独立实用程序 接近

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。

220
Troels Arvin

试试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管)
80
Boop

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

36
Cheekysoft

iconv(1)

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

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

20
Daniel Papasian
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
19
Jay Bazuzi

尝试iconv Bash功能

我把它放到.bashrc中:

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

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

utf8 MyClass.Java
16
Arne Evertsson

试试Notepad ++

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

13
Jeremy Glover

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"-- {}一起传递。在这两者之间,utf-8输出文件暂时命名为converted

Whereby file -bi 表示:

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

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

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

点击这里 更多find嘉豪

9
Serge Stroobandt

PHP iconv()

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

3
user15096

DOS/Windows:使用 代码页

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

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

2
lalthomas

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

$ 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)时问题就完成了。

我希望这有助于某人。

1
Maciel Bombonato

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

  • 一个允许用户重新加载具有不同编码的文本(并且因此,可视地控制结果)
  • 另一个允许用户在保存之前明确选择编码(和行结束char)
0
yota

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

0
kinORnirvana

使用Ruby:

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

0
Dorian

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

0
Nikolai Varankine