Проблема кодування файлу


9

Я отримую файл з фарерським іменем і намагаюся зберегти його у сценарії PHP:

2010_08_Útflutningur.xls

У Ubuntu 10.04 LTS зберігає його як:

2010_08_�tflutningur.xls (invalid encoding)

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

Це помилка Ubuntu, яку я можу виправити, або мені просто потрібно відмовитись та змінити ім’я в php?

Чи є документ, у якому зазначено, що є прийнятною схемою для імені файлу в Ubuntu, або які специфікації кодування?

Дякую


Як ви отримуєте та зберігаєте файл через PHP? (Як виглядає код?)
Кіс Кук

Я розбирав це з електронної пошти. Код складний :)
Elzo Valugi

Існує аналогічне запитання та відповіді зі сценарієм для відновлення зламаних імен файлів.
мастило

Відповіді:


5

Це виглядає як проблема кодування. На жаль, PHP потребує трохи ручної роботи, коли мова йде про кодування, оскільки його рядки за замовчуванням є однобайтовими. Якщо ви створюєте ім'я файлу в PHP, це utf8_encode()повинно бути корисним; зауважте, що він передбачає кодування ISO-8859-1 для входу.

З іншого боку, якщо ви використовуєте ім'я файлу, подане клієнтом, можливо, ви можете попросити клієнта зробити кодування за вас. Це робиться з accept-charsetатрибутом <form>тегу та / або встановленням схеми сторінки, на якій розміщена форма. Деякі клієнти можуть використовувати те чи інше, тому для найкращих результатів використовуйте UTF-8 для кожного.


7

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

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

sudo apt-get install nautilus-filename-repairer

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

Щоб отримати правильно закодовані імена файлів від клієнта, ви можете спробувати техніку, пояснену eswald.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.