转换文本文件编码

Sey*_*mad 16 encoding

我经常遇到具有字符编码问题的文本文件(例如我的母语波斯语的字幕文件)。这些文件是在 Windows 上创建的,并以不合适的编码(似乎是 ANSI)保存,看起来乱七八糟且不可读,如下所示:

在此处输入图片说明

在 Windows 中,可以使用Notepad++轻松解决此问题,将编码转换为 UTF-8,如下所示:

在此处输入图片说明

而正确的可读结果是这样的:

在此处输入图片说明

我在 GNU/Linux 上搜索了很多类似的解决方案,但不幸的是,建议的解决方案(例如这个问题)不起作用。最重要的是,我看到人们提出建议iconvrecode但我对这些工具并不走运。我测试了许多命令,包括以下命令,但都失败了:

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 
Run Code Online (Sandbox Code Playgroud)

这些都没有用!

我正在使用 Ubuntu-14.04,我正在寻找一个简单的解决方案(GUI 或 CLI),它的工作原理与 Notepad++ 一样。

“简单”的一个重要方面是不需要用户确定源编码;相反,源编码应该由工具自动检测,并且只有目标编码应该由用户提供。但是,我也很高兴知道需要提供源编码的工作解决方案。

如果有人需要测试用例来检查不同的解决方案,可以通过此链接访问上述示例。

Inc*_*rsi 12

这些带有波斯语文本的 Windows 文件以Windows-1256编码。所以它可以通过类似于 OP 尝试的命令破译,但具有不同的字符集。即:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(谴责原始海报的投诉;见评论)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt
Run Code Online (Sandbox Code Playgroud)

这个假设 LANG 环境变量设置为 UTF-8 语言环境。要转换为任何编码(UTF-8 或其他),无论当前的语言环境如何,都可以说:

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}
Run Code Online (Sandbox Code Playgroud)

原始海报也与文本重新编码工具(recode、iconv)的语义混淆。对于源编码(source..或 -f),必须指定保存文件的编码(由创建它的程序)。不是基于尝试(但失败)读取它的程序中的 mojibake 字符的一些(天真的)猜测。为波斯文本尝试 ISO-8859-15 或 WINDOWS-1252 显然是一个僵局:这些编码只是不包含任何波斯字母。


Sey*_*mad 4

我找到的可行解决方案是使用Microsoft Visual Studio Code文本编辑器,它是免费软件,可用于 Linux。

在 VS-Code 中打开要转换其编码的文件。在窗口的底部,有几个按钮。其中之一与文件编码有关,如下图:

在此输入图像描述

单击此按钮会弹出一个顶部菜单,其中包含两个项目。从此菜单中选择“重新打开并编码”选项,如下所示:

在此输入图像描述

这将打开另一个菜单,其中包含不同编码的列表,如下所示。现在选择“阿拉伯语(Windows 1256)”:

在此输入图像描述

这将修复乱码文本,如下所示:

在此输入图像描述

现在再次单击编码按钮,这次选择“使用编码保存”选项,如下所示:

在此输入图像描述

并在新菜单中选择“UTF-8”选项:

在此输入图像描述

这将使用 UTF-8 编码保存更正后的文件:

在此输入图像描述

完毕! :)