Где находится алгоритм сортировки Nautilus / файлов определены?

Когда я смотрю на файлы, перечисленные в Nautilus (сортировка по имени), если есть как английские, так и не-ASCII (в моем случае японские) символы, некоторые символы (kana) смешиваются с символами ASCII вне порядка. (Windows разделяет их должным образом.)

Я проверил много связанных вопросов здесь, и похоже, что порядок сортировки жестко запрограммирован в Nautilus, и поэтому не может быть изменен.

Но мой вопрос здесь не в том, как чтобы изменить его, но там, где фактически определен алгоритм сортировки, относящийся к не-ASCII символам. Я использую 18.04, если это важно. Моя локаль - американский английский. Команда

Terminal ls , похоже, отдает тот же порядок, так что это может быть системная настройка, а не специфическая для Nautilus, но опять же я не знаю, где искать это.

1
задан 21 October 2020 в 22:34

2 ответа


Предварительные требования: Сначала проверьте, что в вашей системе установлена ​​локаль вашего языка (в вашем случае японская локаль), с помощью команды:

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

Если японская локаль ( ja_JP.UTF8) отсутствует в списке, вы должны добавить его в свою систему, используя:

$ sudo dpkg-reconfigure locales

Как правило, порядок сортировки является системной настройкой и зависит от вашей текущей локали. Вы упомянули, что используете локаль "US-English". Я предполагаю, что это 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

Примечание. В приведенных выше командах (ls и nautilus) я поставил префикс среды переменная , которая влияет только на этот вызов команды. Если вы хотите изменить свою локаль навсегда, вам придется изменить «локаль по умолчанию» также с помощью команды sudo dpkg-reconfigure locales.

1
ответ дан 22 October 2020 в 11:01

Алгоритм сортировки Nautilus/File, похоже, определен в GLib :

GLib — это базовая библиотека низкого уровня, которая служит основой для проектов. такие как GTK и GNOME.

Официальные места загрузки: https://download.gnome.org/sources/glib

А точнее в gunicollate.c и его g_utf8_collate_key_for_filename().

Это обсуждается в различных проблемах, таких как

"g_utf8_collate_key_for_filename() угловые случаи с цифрами"

или эта старая ошибка на Launchpad:

"Сортировка по имени не работает не работает хорошо с цифрами или специальными символами"

где комментарий №10 предлагает использовать этот хак для решения проблемы сортировки:

https://github.com/heralight/GlibSortFileNameHackLibrary

0
ответ дан 1 January 2021 в 16:30

Другие вопросы по тегам:

Похожие вопросы: