我经常遇到有字符编码问题的文本文件(例如我的母语波斯语的字幕文件)。这些文件是在 Windows 上创建的,并使用不合适的编码(似乎是 ANSI)保存,看起来乱码且不可读,如下所示:
在 Windows 中,可以使用Notepad++将编码转换为 UTF-8 轻松解决此问题,如下所示:
而正确的可读结果是这样的:
我在 GNU/Linux 上搜索了很多类似的解决方案,但不幸的是建议的解决方案(例如这个问题)不起作用。最重要的是,我看到人们建议使用这些工具iconv
,recode
但我没有运气。我测试了很多命令,包括以下命令,但都失败了:
$ 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
这些都不起作用!
我正在使用 Ubuntu-14.04,我正在寻找一个像 Notepad++ 一样工作的简单解决方案(GUI 或 CLI)。
“简单”的一个重要方面是用户不需要确定源编码;相反,源编码应该由工具自动检测,而用户只应提供目标编码。但是,尽管如此,我也很高兴知道需要提供源编码的工作解决方案。
如果有人需要测试用例来检查不同的解决方案,可以通过此链接访问上面的示例。
这些带有波斯语文本的 Windows 文件以Windows-1256编码。所以它可以通过类似于 OP 尝试的命令来破译,但使用不同的字符集。即:
recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(根据原发布者的投诉进行谴责;见评论)
这个假设 LANG 环境变量设置为 UTF-8 语言环境。要转换为任何编码(UTF-8 或其他),无论当前语言环境如何,可以说:
原始海报也与文本重新编码工具(recode,iconv)的语义混淆。对于源代码编码(source
..
或 -f),必须指定保存文件的编码(由创建它的程序)。不是基于尝试(但失败)读取它的程序中的 mojibake 字符的一些(天真的)猜测。为波斯文本尝试 ISO-8859-15 或 WINDOWS-1252 显然是一个僵局:这些编码只是不包含任何波斯字母。我找到的可行解决方案是使用Microsoft Visual Studio Code文本编辑器,它是免费软件,可用于 Linux。
在 VS-Code 中打开要转换其编码的文件。在窗口的底部,有几个按钮。其中之一与文件编码有关,如下所示:
单击此按钮会弹出一个包含两个项目的开销菜单。从此菜单中选择“使用编码重新打开”选项,如下所示:
这将打开另一个菜单,其中包含不同编码的列表,如下所示。现在选择“阿拉伯语(Windows 1256)”:
这将像这样修复乱码文本:
现在再次单击编码按钮,这次选择“使用编码保存”选项,如下所示:
在新菜单中选择“UTF-8”选项:
这将使用 UTF-8 编码保存更正后的文件:
完毕!
:)
我不知道这是否适用于波斯语:我使用 Gedit,它给出了错误编码的错误,我可以选择我想翻译成 UTF-8 的内容,它只是文本而不是点亮格式,但这是屏幕截图!
对不起,我终于看完了我的文本文件,所以现在它们都被转换了。
我也喜欢记事本++,仍然怀念它。
除了
iconv
它本身或在脚本中是一个非常有用的工具之外,还有一个非常简单的解决方案,我发现它试图找出希腊字符集 (Windows-1253 + ISO-8859-7) 的相同问题。All you need to do is to open the text file through Gedit's "Open" dialog and not by double-clicking it. At the bottom of the dialog box there is a drop-down for Encoding, which is set to "Automatically Detected". Change it to "Windows-125x" or other suitable codeset and the text will be perfectly readable in Gedit. You can then save it using UTF-8 encoding, just to be sure you won't have the same issue again in the future...
作为该问题的补充解决方案,我根据Incnis Mrsi 的回答
iconv
中的命令准备了一个有用的 Bash 脚本:将此脚本另存为
fix-encoding.sh
,赋予它执行权限chmod +x fix-encoding.sh
,并像这样使用它:此脚本将尝试修复作为输入提供的任意数量文件的编码。请注意,文件将就地固定,因此内容将被覆盖。
If you like working in GUI instead of CLI, like I do:
You can use Vim to do the encoding conversion:
但这取决于 Vim 是否正确检测到原始编码。要使其在不正确的情况下使用正确的,您可以执行以下操作:
或者,要保存到不同的文件而不是就地保存:
I figured out it in manjaro with gaupol and work perfect but you must do it one by one and don't have batch mode
https://github.com/otsaloma/gaupol https://pkgs.org/download/gaupol
Just open a file (no matter source encoding) Save As (Shift + Ctrl + S) In opened window, change Encoding to UTF-8 Hit Save and finished