581

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

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

一切顺利:您最喜欢的脚本语言的单行代码、命令行工具或其他用于操作系统、网站等的实用程序。

迄今为止最好的解决方案:

在 Linux/UNIX/OS X/cygwin 上:

  • Troels Arvin建议的Gnu iconv最好用作过滤器。它似乎是普遍可用的。例子:

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

    正如Ben所指出的,有一个使用 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
    

    您也可以将它们组合起来。

    将带有 Unix 行尾的 Base64 编码的 UTF8 文件转换为带有 Dos 行尾的 Base64 编码的 Latin 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

(虽然不支持 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

注意:可能的枚举值为“Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii”。

4

21 回答 21

277

独立实用程序方法

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。

于 2008-09-15T17:24:23.060 回答
101

试试 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. ": qotes 在这里是因为管道。(否则 bash 会将它们用作 bash 管道)
于 2015-09-30T08:41:28.073 回答
40

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

于 2008-09-15T17:24:18.723 回答
24

图标v(1)

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

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

于 2008-09-15T17:23:17.183 回答
24
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
于 2008-09-15T17:29:28.197 回答
18

尝试 iconv Bash 功能

我已经把它放入.bashrc

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

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

utf8 MyClass.java
于 2011-12-06T14:43:58.560 回答
17

试试记事​​本++

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

于 2012-06-07T14:30:46.907 回答
16

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"' -- {} \;

为了执行这些步骤,一个子 shellsh与 一起使用,运行一个带有标志-exec的单行程序,并将文件名作为位置参数传递给。在这两者之间,输出文件临时命名为.-c"$1"-- {}utf-8converted

其中的file -bi意思是:

  • -b,--brief 不要将文件名添加到输出行(简短模式)。

  • -i,--mime 使 file 命令输出 mime 类型的字符串,而不是更传统的人类可读的字符串。因此它可以说例如text/plain; charset=us-ascii而不是ASCII text。该sed命令仅us-ascii根据iconv.

find命令对于此类文件管理自动化非常有用。单击此处获取更多find信息

于 2016-08-28T19:46:57.067 回答
4

DOS/Windows:使用代码页

chcp 65001>NUL
type ascii.txt > unicode.txt

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

于 2017-06-27T19:33:29.997 回答
3

PHP 图标v()

iconv("UTF-8", "ISO-8859-15", $input);

于 2008-09-17T06:18:34.940 回答
3

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

iconv -f $(chardetect input.text | awk '{print $2}') -t utf-8 -o output.text
于 2020-10-05T18:14:51.300 回答
1

在 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://docs.microsoft.com/en-us/dotnet/api/system.text.encoding

于 2020-07-30T15:14:18.177 回答
1

通常写属性文件(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:我用葡萄牙语写了 Execution number one/two 来强制使用特殊字符。

就我而言,在第一次执行时,我收到了这条消息:

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

我希望这对某人有所帮助。

于 2016-11-28T19:32:40.160 回答
1

只需在 IntelliJ IDEA IDE 中更改加载文件的编码,在状态栏(底部)的右侧,其中指示当前字符集。它提示重新加载或转换,使用转换。确保您提前备份了原始文件。

于 2018-10-09T16:45:06.037 回答
1

尝试编码检查器

github上的编码检查器

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

文件编码检查器需要 .NET 4 或更高版本才能运行。

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

在此处输入图像描述

于 2020-07-19T04:53:41.357 回答
0

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

于 2018-07-01T10:17:32.557 回答
0

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

  • 一种使用户能够重新加载具有不同编码的文本(因此,可以直观地控制结果)
  • 另一个使用户能够在保存之前明确选择编码(和行尾字符)
于 2018-09-17T11:08:00.050 回答
0

如果 macOS GUI 应用程序是您的生计,那么SubEthaEdit是我通常用于进行编码处理的文本编辑器——它的“转换预览”允许您查看输出编码中的所有无效字符,并修复/删除它们。

而且它现在是开源的,所以对他们来说很好。

于 2019-11-30T18:49:39.007 回答
0

使用红宝石:

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

来源:https ://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

于 2018-06-26T06:25:16.317 回答
0

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

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

于 2020-08-18T09:34:35.600 回答
-1

As described on How do I correct the character encoding of a file? Synalyze It! lets you easily convert on OS X between all encodings supported by the ICU library.

Additionally you can display some bytes of a file translated to Unicode from all the encodings to see quickly which is the right one for your file.

于 2013-06-26T19:42:37.773 回答