在字符集之间转换文本文件的最佳方法?
什么是在字符集之间转换文本文件的最快速,最简单的工具或方法?
具体来说,我需要从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
请注意,该命令直接修改文件
说明部分!
-
+
:vim在打开文件时直接input命令。 Usualy用于在特定行打开文件:vim +14 file.txt
-
|
:多个命令的分隔符(如;
在bash中) -
set nobomb
:no utf-8 BOM -
set fenc=utf8
:设置新的编码为utf-8 doc链接 -
x
:保存并closures文件 -
filename.txt
:filename.txt
path -
"
:由于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-1到UTF-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的文件的一些字节,以快速查看哪个文件是正确的。