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

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

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

一切都可以:你最喜欢的脚本语言的一行程序,命令行工具或其他用于操作系统的实用程序,网站等等。

目前为止的最佳解决方案:

Linux/UNIX/OS X/cygwin操作系统:

  • Gnu iconv他阿尔文建议最好使用作为一个过滤器。它似乎随处可见。例子:

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

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

  • 重新编码 (手册)由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
    

    你也可以把它们结合起来。

    转换Base64编码的UTF8文件与Unix行结束到Base64编码的拉丁1文件与Dos行结束:

      $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

在Windows上使用Powershell (Jay Bazuzi):

  • # EYZ0

(但是没有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

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

584333 次浏览

iconv(1)

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

此外,在许多语言中都有基于图标的工具。

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

# EYZ0方法

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。

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

PHP iconv ()

# EYZ0

试试iconv Bash函数

我把它放到.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 - 1utf - 8的转换。单击"Encoding",然后单击"Convert to UTF-8"

正如在如何修改文件的字符编码?上所描述的,Synalyze它!可以让您轻松地在OS X上转换由ICU库支持的所有编码。

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

尝试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 文档链接
  5. x:保存并关闭文件
  6. filename.txt:文件的路径
  7. ":报价在这里是因为管道。(否则bash将使用它们作为bash管道)

联机使用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

其中file -bi表示:

    <李> < p > # EYZ0, # EYZ1 不要在输出行前加上文件名(简单模式)。

    <李> < p > # EYZ0, # EYZ1 导致文件命令输出mime类型字符串,而不是更传统的人类可读字符串。例如,它可能会说text/plain; charset=us-ascii而不是ASCII textsed命令根据iconv的要求将其仅切割为us-ascii
find命令对于这样的文件管理自动化非常有用。

. 更多的find丰富

写属性文件(Java)通常我在linux(薄荷和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:我用葡萄牙语写了第1 / 2个执行,以强制使用特殊字符。

以我为例,在第一次执行时,我收到了这样的消息:

$ 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的微软名称。设置代码页后,以下命令生成的输出将是代码页集。

ruby:

ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"

来源:# EYZ0

使用以下Python脚本:https://github.com/goerz/convert_encoding.py 适用于任何平台。需要Python 2.7

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

  • 允许用户用不同的编码重新加载文本(因此,可以直观地控制结果)
  • 另一个允许用户在保存之前显式地选择编码(和行字符的结束)

简单地改变IntelliJ IDEA IDE中加载文件的编码,在状态栏的右侧(底部),当前字符集被指示。它提示重新加载或转换,使用转换。确保你事先备份了原始文件。

如果macOS GUI应用程序是你的面包和黄油,SubEthaEdit是我经常使用的文本编辑器,用于编码-它的“转换预览”允许你看到输出编码中的所有无效字符,并修复/删除它们。

现在是开源,为他们欢呼😉。

尝试EncodingChecker

EncodingChecker on github

文件编码检查器是一个GUI工具,允许您验证一个或多个文件的文本编码。该工具可以显示所有选定文件的编码,或者仅显示不具有指定编码的文件的编码。

文件编码检查程序需要。net 4或更高版本才能运行。

对于编码检测,文件编码检查器使用UtfUnknown字符集检测器库。没有字节顺序标记(BOM)的UTF-16文本文件可以通过启发式检测。

enter image description here

powershell:

function Recode($InCharset, $InFile, $OutCharset, $OutFile)  {
# Read input file in the source encoding
$Encoding = [System.Text.Encoding]::GetEncoding($InCharset)
$Text = [System.IO.File]::ReadAllText($InFile, $Encoding)
    

# Write output file in the destination encoding
$Encoding = [System.Text.Encoding]::GetEncoding($OutCharset)
[System.IO.File]::WriteAllText($OutFile, $Text, $Encoding)
}


Recode Windows-1252 "$pwd\in.txt" utf8 "$pwd\out.txt"

支持的编码名称列表:

https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding

还有一个转换文件编码的web工具:https://webtool.cloud/change-file-encoding

它支持广泛的编码,包括一些罕见的编码,如IBM代码页37。

假设您不知道输入编码,并且仍然希望实现大部分转换的自动化,我总结了前面的答案,得出了这个一个衬套

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

Visual Studio代码

  1. 打开你的文件Visual Studio代码
  2. 使用编码重新打开:在底部状态栏的右侧,你应该看到你当前的文件编码(如"UTF-8")单击此,并选择“重新打开编码”。
  3. 选择正确的编码文件(例如:ISO 8859-2)。
  4. 确认表示您的内容按预期显示。
  5. 使用编码保存:底部状态栏现在应该显示您的新编码格式(例如:ISO 8859-2)。点击这个,选择“保存与编码”;并选择UTF-8(或任何您想要的新编码)。

注意:这将覆盖您的原始文件。先做备份。