Я получаю файл с фарерским именем и пытаюсь сохранить его в сценарии PHP:
2010_08_Útflutningur.xls
В Ubuntu 10.04 LTS сохраняет его как:
2010_08_�tflutningur.xls (invalid encoding)
I Я установил и запустил utf8-migration-tool
, но безрезультатно.
Это ошибка Ubuntu, которую я могу исправить, или мне просто нужно отказаться и изменить имя в php?
Есть ли документ, в котором указано, какая кодировка является приемлемой для имени файла в Ubuntu, или Каковы спецификации кодирования?
Спасибо
По умолчанию Ubuntu использует UTF-8 для имен файлов. Большинство современных дистрибутивов Linux и многие другие операционные системы делают это (Windows / NTFS - самое известное исключение с UTF-16).
Чтобы исправить файлы, имена которых имеют неправильную кодировку, например, ту, которую вы показываете, вы можете попробовать использовать nautilus-filename-repairer
sudo apt-get install nautilus-filename-repairer
Вы можете использовать PHP iconv
функции для преобразования строк (имен файлов) из одной кодировки в другую. Конечно, для этого необходимо знать, в какой кодировке они находятся.
Чтобы получить правильно закодированные имена файлов от клиента, вы можете попробовать методику, объясненную eswald.
Это похоже на проблему кодирования. К сожалению, PHP нуждается в некоторой выдержке, когда дело доходит до кодирования, потому что его строки по умолчанию однобайтовые. Если вы создаете имя файла в PHP, utf8_encode()
должно быть полезно; заметьте, однако, что он принимает кодировку ISO-8859-1 для ввода.
С другой стороны, если вы используете имя файла, отправленное клиентом, возможно, вы можете попросить клиента сделать кодировку для вас. Это делается с помощью атрибута accept-charset
тега <form>
и / или путем установки кодировки страницы, на которой находится форма. Некоторые клиенты могут использовать один или другой, поэтому для достижения наилучших результатов используйте UTF-8 для каждого.