Какое кодирование, используемое, когда вызывают fopen или открытый?

Когда мы вызываем системный вызов в Linux как'open'или stdio функционируют как'fopen'мы должны обеспечить'const char * filename'. Мой вопрос - то, что кодирование используется здесь? Это - utf-8 или ASCII или iso8859-x? Это зависит от параметра настройки системы или параметра среды?

Я знаю в MS Windows существует a _wopen которые принимают utf-16.

13
задан unwind 5 January 2010 в 11:16
поделиться

3 ответа

Это байтовая строка, интерпретация зависит от конкретной файловой системы.

8
ответ дан 2 December 2019 в 00:18
поделиться

Это зависит от системной локали. Посмотрите на вывод команды "локаль". Если переменные заканчиваются на UTF-8, то ваша локаль - UTF-8. Большинство современных линуксов будут использовать UTF-8. Хотя Эндрю прав, что технически это всего лишь байтовая строка, если вы не подберете системную локаль, некоторые программы могут работать некорректно, и будет невозможно получить корректный пользовательский ввод и т.д. Лучше всего придерживаться UTF-8.

.
4
ответ дан 2 December 2019 в 00:18
поделиться

Вызовы файловых систем на Linux являются кодировкой-диагностикой, т.е. они не знают (не должны знать) о конкретной кодировке. Что касается их, то байтовая строка, на которую указывает аргумент имени файла, передается в файловую систему as-is. Файловая система ожидает, что имена файлов находятся в правильной кодировке (обычно UTF-8, как упоминал Мэтью Талберт)

Это означает, что вам часто ничего не нужно делать (имена файлов рассматриваются как непрозрачные байт-строки), но на самом деле это зависит от того, откуда вы получаете имя файла и нужно ли вам каким-либо образом манипулировать именем файла

.
4
ответ дан 2 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

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