Post

Elementary OS 5.0 下 gedit 中文乱码的问题

针对 Elementary OS 5.0 及 Linux 桌面环境,解决 gedit 及新版 GNOME 文本编辑器打开中文文本时出现乱码的有效方法。

Elementary OS 5.0 下 gedit 中文乱码的问题

在 Linux 桌面环境(如 Elementary OS、Ubuntu 等)中,由于默认的字符编码通常为 UTF-8,当我们尝试打开一些较旧的、采用 GBK、GB2312 或 GB18030 编码的 Windows 文本文件时,常常会遇到满屏乱码的情况。

gedit 作为经典的 GNOME 文本编辑器,虽然功能简洁,但早期版本的偏好设置中并没有直接提供编码格式的图形化修改入口。网上虽然流传着各种解决方案,但由于版本迭代,许多方法已经失效。

经过实际测试,在 Elementary OS 5.0(基于 Ubuntu 18.04)及类似版本的 gedit 中,通过终端使用 gsettings 修改候选编码列表是最直接有效的方法。


一、 Gedit 乱码解决方法

打开终端(Terminal),直接运行以下命令来扩展 gedit 的自动识别编码候选列表:

1
gsettings set org.gnome.gedit.preferences.encodings candidate-encodings "['GB18030', 'GB2312', 'GBK', 'UTF-8', 'BIG5', 'CURRENT', 'UTF-16']"

二、 文本编码转码

  1. Windows 环境下预先转码

如果你在 Windows 环境下就发现或创建了采用 ANSI/GBK 编码的文件,可以直接通过自带的记事本进行格式转换:

1
2
3
4
5
6
7
8
9
使用 记事本(Notepad) 打开目标 .txt 文件。

点击菜单栏的 文件 (File) -> 另存为 (Save As)。

在弹出的保存窗口下方,找到 编码 (Encoding) 下拉菜单。

将默认的 ANSI 修改为 UTF-8(或 UTF-8 with BOM / UTF-8)。

点击 保存 并覆盖原文件或另存为新文件。
  1. Linux 环境下使用 iconv 命令批量/单独转码

如果文件已经传输到了 Linux 系统中,无需回传到 Windows,直接在 Linux 终端使用内置的 iconv 命令行工具即可完成编码转换。

① 查询文件当前的实际编码

在转码前,可以使用 file 命令查看文件的当前编码状态:

1
file -i filename.txt

② 单个文件转码命令

使用 iconv 将 GB18030(兼容 GBK 和 GB2312)格式的文件转换为 UTF-8 格式:

1
iconv -f GB18030 -t UTF-8 filename.txt -o filename_utf8.txt

③ 原地覆盖转码(覆盖原文件)

如果不需要保留原文件,结合临时文件实现原文件覆盖:

1
iconv -f GB18030 -t UTF-8 filename.txt > filename.txt.tmp && mv filename.txt.tmp filename.txt

④ 批量转码同目录下的所有 .txt 文件

如果目录下有大量乱码文件,可以使用简单的 Shell 循环批量转码:

1
2
3
for file in *.txt; do
    iconv -f GB18030 -t UTF-8 "$file" -o "${file%.txt}_utf8.txt"
done
This post is licensed under CC BY 4.0 by the author.