2010-03-26 5 views
7

Мне нужно сохранить файлы с нелатинскими именами файлов в файле, используя PHP.PHP, определяющий кодировку файловой системы

Я хочу сделать эту работу кросс-платформенной. Как узнать, какую кодировку я могу использовать для записи файла? Я понимаю, что многие современные файловые системы основаны на UTF-8 (это правильно?), Но я сомневаюсь, что Windows XP (например).

Итак, есть ли надежный механизм обнаружения?

+0

Я всегда конвертировал нелатинские символы в латинский эквивалент и лишал пунктуацию от имени файла, если я пишу файл на диск. Можете ли вы гарантировать, что у ваших пользователей будет установлен соответствующий языковой стандарт? –

+0

NTFS (используется в WinXP и т. Д.) Использует utf-16. php 5.x на окнах использует кодовую страницу IUSR, например, latin. Я слышал, что php 6 будет использовать utf16 на окнах – SteelBytes

+0

@Greg K: Проект, над которым я работаю, является сервером WebDAV, поэтому мне нужно чистое сопоставление. – Evert

ответ

5

Не ответ на ваш вопрос, но если вам не нужно выполнять обширные операции на уровне файловой системы (например, поиск, сортировка ...), есть хорошая кросс-платформенная обходная проблема для проблемы, изложенная в this SO question: URLEncode() имена файлов.

Hörensägen.txt 

получает превратился в

H%c3%b6rens%c3%a4gen.txt 

, который должен быть безопасным для использования в любой файловой системе и способен отображать любые UTF-8 символов.

Я нахожу это более предпочтительным, чтобы попытаться «изначально» справиться с возможностями ОС хоста, что гарантированно будет сложным и подверженным ошибкам (в дополнение к различиям в операционной системе, я уверен, что различные форматы файловой системы - FAT16 , FAT32, NTFS, версии extFS 1/2/3 .... сообщают о своих собственных правилах.)

+0

Неплохое предложение. Полагаю, я мог бы предоставить этот вариант. В вопросе, который вы указали, также упоминается, что Windows использует ISO-8859-1. – Evert

+0

@ Неверно, обработка строк в Windows была долгой UTF-16, насколько я знаю, ответ утверждает, что * файловая система Windows * для файловой системы Windows использует ISO-8859-1. Я не знаю, правда ли это, но это возможно. –

-2

Не ответ, но ... WinXP основан на UTF-8 (по словам Джеффри Книга «CLR через C#» Рихтера и все функции ASCII WinAPI - это всего лишь обертки для аналогичных UTF-8.

+4

'WinXP - это блокировка на основе UTF-8. все семейства WinNT построены на utf-16 (хорошо - почти верно, раньше nt не обрабатывает суррогаты) – SteelBytes

+0

О, очень жаль. Набрал его, не задумываясь о «..- 8» – kpower

Смежные вопросы