Разница между G_OPTION_ARG_FILENAME и G_OPTION_ARG_STRING в glib - PullRequest
1 голос
/ 02 июня 2019

Я заметил, что синтаксический анализатор параметров командной строки в glib имеет тип как для строки, так и для имени файла.Но я предполагаю, что имена файлов - это просто строки.

Есть ли практическая разница между G_OPTION_ARG_FILENAME и G_OPTION_ARG_STRING или G_OPTION_ARG_FILENAME просто для большей наглядности?

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

G_OPTION_ARG_STRING, более конкретно, строка, закодированная в кодировке текущей локали. G_OPTION_ARG_FILENAME - строка, закодированная в кодировке имени файла системы. Эти кодировки часто соответствуют UTF-8 в современных системах Linux, но в некоторых системах они могут не совпадать.

0 голосов
/ 02 июня 2019

Если вы посмотрите справочное руководство GLib , вы найдете следующее:

G_OPTION_ARG_STRING   the option takes a string argument.
G_OPTION_ARG_FILENAME   the option takes a filename as argument.

Кодировка строк и имен файлов может отличаться, поэтому возможны два варианта. Глиб использует UTF-8 для строк. Кодировка имен файлов зависит от операционной системы, но обычно это также UTF-8;

По умолчанию GLib предполагает, что имена файлов на диске находятся в кодировке UTF-8. Это допустимое предположение для файловых систем, которые были созданы сравнительно недавно: большинство приложений используют кодировку UTF-8 для своих строк, и это также то, что они используют для имен файлов, которые они создают. Однако старые файловые системы могут по-прежнему содержать имена файлов, созданные в «старых» кодировках, таких как ISO-8859-1.

Цитата также из справочного руководства GLib .

...