Когда мы вызываем системный вызов в Linux как'open
'или stdio функционируют как'fopen
'мы должны обеспечить'const char * filename
'. Мой вопрос - то, что кодирование используется здесь? Это - utf-8 или ASCII или iso8859-x? Это зависит от параметра настройки системы или параметра среды?
Я знаю в MS Windows существует a _wopen
которые принимают utf-16.
Это байтовая строка, интерпретация зависит от конкретной файловой системы.
Это зависит от системной локали. Посмотрите на вывод команды "локаль". Если переменные заканчиваются на UTF-8, то ваша локаль - UTF-8. Большинство современных линуксов будут использовать UTF-8. Хотя Эндрю прав, что технически это всего лишь байтовая строка, если вы не подберете системную локаль, некоторые программы могут работать некорректно, и будет невозможно получить корректный пользовательский ввод и т.д. Лучше всего придерживаться UTF-8.
.Вызовы файловых систем на Linux являются кодировкой-диагностикой, т.е. они не знают (не должны знать) о конкретной кодировке. Что касается их, то байтовая строка, на которую указывает аргумент имени файла, передается в файловую систему as-is. Файловая система ожидает, что имена файлов находятся в правильной кодировке (обычно UTF-8, как упоминал Мэтью Талберт)
Это означает, что вам часто ничего не нужно делать (имена файлов рассматриваются как непрозрачные байт-строки), но на самом деле это зависит от того, откуда вы получаете имя файла и нужно ли вам каким-либо образом манипулировать именем файла
.