当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在字符集之间转换文本文件的最佳方法?》经验,为你挑选了8个好方法。

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

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

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

迄今为止的最佳解决方

在Linux/UNIX/OS X/cygwin上:

Troels Arvin建议的Gnu iconv最适合用作过滤器.它似乎普遍可用.例:

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

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

由Cheekysoft建议的Gnu 重新编码(手动)将就地转换一个或多个文件.例:

$ 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".

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

Troels Arvin.. 230

独立的实用方法

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> Troels Arvin..:

独立的实用方法

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.


不知道输入文件的编码?使用`chardet in.txt`生成最佳猜测.结果可以在`iconv -f ENCODING`中用作ENCODING.
对于那些因非破折号版本不可用而被绊倒的人来说,看起来像iconv的OSX(可能还有所有BSD)版本都不支持各种UTF-*编码的非破折号别名.`iconv -l | grep UTF`会告诉你iconv副本支持的所有与UTF相关的编码.
防止在无效字符处退出(避免"在位置`消息的非法输入序列"),并用"相似"字符替换"怪异"字符:`iconv -c -f UTF-8 -t ISO-8859-1 // TRANSLIT in. txt> out.txt`.

2> Boop..:
试试VIM

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

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

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

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

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


说明部分!

    +:vim用于在打开文件时直接输入命令.Usualy用于在特定行打开文件:vim +14 file.txt

    |:多个命令的分隔符(如;bash)

    set nobomb :没有utf-8 BOM

    set fenc=utf8:将新编码设置为utf-8 doc链接

    x :保存并关闭文件

    filename.txt :文件的路径

    ":由于管道,qotes在这里.(否则bash会将它们用作bash管)



3> Cheekysoft..:

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



4> Daniel Papas..:

的iconv(1)

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

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



5> Jay Bazuzi..:
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



6> Arne Evertss..:
尝试iconv Bash功能

我把它放进去.bashrc:

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

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

utf8 MyClass.java


使用tmp = $(mktmp)来创建临时文件是更好的风格.此外,rm的行是多余的.
请注意,此函数会删除输入文件,而不会验证iconv调用是否成功.

7> 小智..:
试试Notepad ++

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



8> Serge Stroob..:
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"' -- {} \;

要执行这些步骤,子壳sh使用具有-exec,运行一衬垫与所述-c标志,并且使文件名作为位置参数"$1"-- {}.在两者之间,utf-8输出文件暂时命名converted.

因此file -bi意味着:

-b, - brief
不要将文件名前置到输出行(简短模式).

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

-b命令对于此类文件管理自动化非常有用.

点击查看更多--brief嘉豪.


我不得不在Mac OS X上使用这个解决方案,至少在我的版本上.`找到.-type f -iname*.txt -exec sh -c'iconv -f $(file -b --mime-encoding"$ 1"| awk"{print toupper(\ $ 0)}")-t UTF-8>转换"$ 1"&& mv转换为"$ 1"' - {} \;`
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有