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

Ant*_*emi 509 unicode text utf-8 character-set

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

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

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

迄今为止的最佳解决方

在Linux/UNIX/OS X/cygwin上:

在带有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
Run Code Online (Sandbox Code Playgroud)

注意:可能的枚举值为"Unknown,String,Unicode,Byte,BigEndianUnicode,UTF8,UTF7,Ascii".

Tro*_*vin 230

独立的实用方法

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
Run Code Online (Sandbox Code Playgroud)
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output
Run Code Online (Sandbox Code Playgroud)

您不必指定其中任何一个参数.它们将默认为您当前的语言环境,通常为UTF-8.

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

Boo*_*oop 85

试试VIM

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

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

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

vim +"set nobomb | set fenc=utf8 | x" filename.txt
Run Code Online (Sandbox Code Playgroud)

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


说明部分!

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


Che*_*oft 38

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


Dan*_*ian 21

的iconv(1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 自动检测原始编码怎么样? (2认同)

Jay*_*uzi 20

Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT
Run Code Online (Sandbox Code Playgroud)

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

gc FILE.TXT | Out-File -en utf7 file-utf7.txt
Run Code Online (Sandbox Code Playgroud)


Arn*_*son 16

尝试iconv Bash功能

我把它放进去.bashrc:

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

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

utf8 MyClass.java
Run Code Online (Sandbox Code Playgroud)

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

小智 14

试试Notepad ++

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


Ser*_*ndt 12

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"' -- {} \;
Run Code Online (Sandbox Code Playgroud)

要执行这些步骤,子壳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"' - {} \;` (3认同)

Mar*_*eri 8

假设您不知道输入编码并且仍然希望自动执行大部分转换,我通过总结以前的答案得出了这一结论。

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


lal*_*mas 5

DOS/Windows:使用代码页

chcp 65001>NUL
type ascii.txt > unicode.txt
Run Code Online (Sandbox Code Playgroud)

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