Nautilus/文件排序算法在哪里定义?

Nautilus/文件排序算法在哪里定义?

当我查看 Nautilus 中列出的文件(按名称排序)时,如果同时包含英文和非 ASCII(在我的情况下是日语)字符,则某些字符(假名)会与 ASCII 字符无序混合。 (Windows 正确地将它们分开。)

我在这里检查了许多相关问题,似乎排序顺序在 Nautilus 中是硬编码的,因此无法更改。

但我的问题不是如何更改它,而是与非 ASCII 字符相关的排序算法实际上在哪里定义。如果这很重要,我正在使用 18.04。我的语言环境是美国英语。

终端ls命令似乎给出了相同的命令,因此这可能是一个系统设置而不是特定于 Nautilus,但我再次不知道在哪里寻找它。

答案1


先决条件:首先使用以下命令检查系统中是否安装了您的语言的区域设置(在您的情况下为日语区域设置):

$ grep -v '^#' /etc/locale.gen

如果未列出日语语言环境 ( ja_JP.UTF8),则必须使用以下命令将其添加到系统中:

$ sudo dpkg-reconfigure locales

通常,排序顺序是系统设置,与您当前的语言环境有关。您提到您正在使用“美国英语”语言环境。我假设是这样,en_US.UTF-8这可能是您看到文件名按美国排序顺序排序的原因。

首先,从命令行测试以下内容。转到包含英语和日语命名文件的目录并输入命令:

$ LC_ALL=ja_JP.UTF8 ls

如果此命令按照您想要的顺序显示文件,那么您也可以使用此命令尝试 Nautilus:

$ LC_ALL=ja_JP.UTF8 nautilus .

如果您收到如下错误消息:

... C 库不支持语言环境。使用后备“C”语言环境。

再检查一次:

$ grep -v '^#' /etc/locale.gen

查看系统中启用了哪些区域设置。如果未启用日语区域设置,则必须使用以下命令将其添加到系统中:

$ sudo dpkg-reconfigure locales

注意:在上面的命令(lsnautilus)中,我已加上环境变量作为前缀仅影响该命令调用. 如果你想改变你的语言环境永久,您还必须使用该sudo dpkg-reconfigure locales命令更改“默认语言环境”。

答案2

Nautilus/File 排序算法似乎定义在通用库

GLib 是低级核心库,是 GTK 和 GNOME 等项目的基础。

官方下载地址为: https://download.gnome.org/sources/glib

更具体地说gunicollat​​e.c以及它的g_utf8_collate_key_for_filename()功能。

它在各种问题上被讨论,例如

g_utf8_collat​​e_key_for_filename() 带有数字的极端情况

或者 Launchpad 上的这个旧错误:

按名称排序不适合数字或特殊字符

在哪里评论#10建议使用这个技巧来解决排序问题:

https://github.com/heralight/GlibSortFileNameHackLibrary

相关内容