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

烈酒焚心 提交于 2020-02-27 06:35:19

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

具体来说,我需要从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手册 )将就地转换一个或几个文件 。 例:

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

    这使用较短的别名:

    $ recode utf8..l9 in.txt

    重新编码还支持可用于在不同的行尾类型和编码之间进行转换的表面

    将换行符从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

在Windows上使用PowershellJay 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支持吗? 使用“字符串”可以做到这一点,反之亦然

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

注意:可能的枚举值为“未知,字符串,Unicode,字节,BigEndianUnicode,UTF8,UTF7,Ascii”。


#1楼

尝试记事本++

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


#2楼

如何纠正文件的字符编码中所述? 合成吧! 使您可以在ICU库支持的所有编码之间的OS X上轻松转换。

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


#3楼

尝试VIM

如果您有vim ,可以使用以下命令:

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

与此有关的最酷的部分是,您不必知道源编码

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

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


说明部分!

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

#4楼

Oneliner使用查找,具有自动字符集检测

自动检测所有匹配文本文件的字符编码 ,并将所有匹配文本文件转换为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请勿将文件名--brief输出行之前(简短模式)。

  • -i--mime导致file命令输出mime类型的字符串,而不是更传统的人类可读字符串。 因此,它可以说例如text/plain; charset=us-ascii text/plain; charset=us-ascii而不是ASCII textsed命令可将其切割为iconv所需的us-ascii

find命令对于这种文件管理自动化非常有用。 点击查看更多find嘉豪


#5楼

编写属性文件(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:我在葡萄牙语中写了执行编号一/二来强制使用特殊字符。

就我而言,在第一次执行时,我收到以下消息:

$ 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)时,问题就解决了。

我希望这可以帮助某人。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!