Проблема с кодировкой имени файла

Я получаю файл с фарерским именем и пытаюсь сохранить его в сценарии PHP:

2010_08_Útflutningur.xls

В Ubuntu 10.04 LTS сохраняет его как:

2010_08_�tflutningur.xls (invalid encoding)

Я установил и запустил utf8-migration-tool, но без эффекта.

Это ошибка Ubuntu, которую я могу исправить, или мне просто нужно отказаться и изменить имя в php?

Есть ли документ, в котором говорится, что является приемлемым набором символов для имени файла в Ubuntu, или каковы спецификации кодирования?

Спасибо

2 ответа

Решение

Это похоже на проблему кодирования. К сожалению, PHP нуждается в некоторой выдержке, когда дело доходит до кодирования, потому что его строки по умолчанию однобайтовые. Если вы создаете имя файла в PHP, utf8_encode() должно быть полезно; заметьте, однако, что он принимает кодировку ISO-8859-1 для ввода.

С другой стороны, если вы используете имя файла, отправленное клиентом, возможно, вы можете попросить клиента сделать кодировку для вас. Что сделано с accept-charset атрибут <form> и / или установив кодировку страницы, на которой находится форма. Определенные клиенты могут использовать один или другой, поэтому для достижения наилучших результатов используйте UTF-8 для каждого.

По умолчанию Ubuntu использует UTF-8 для имен файлов. Большинство современных дистрибутивов Linux и многие другие операционные системы делают это (Windows/NTFS - самое известное исключение с UTF-16).

Чтобы исправить файлы с именами в неправильной кодировке, например, той, которую вы показываете, вы можете попробовать использовать nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Вы можете использовать PHP iconv функции для преобразования строк (имен файлов) из одной кодировки в другую. Конечно, для этого нужно знать, в какой кодировке они находятся.

Чтобы получить правильно закодированные имена файлов от клиента, вы можете попробовать методику, объясненную eswald.

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