HatoL
Профессор
- Регистрация
- 5 Фев 2008
- Сообщения
- 206
- Реакции
- 36
- Автор темы
- #1
Бьюсь второй час. Есть Windows 7 с NTFS на харде. Есть файлы, которые нужно переименовать. Новые названия берутся из другого файла. В названиях есть различные специальные символы, вроде таких — ★. Пытался сначала просто переименовать средствами пхп один файлик. Вместо звездочки получил "в..." (многоточие одним символом). Попробовал переименовать файл просто через проводник - все нормально, звездочка показывается, файл проигрывается. Значит проблема в том, что винда хранит название не в UTF-8 (в ANSI вообще нет такого символа).
Прочитал в википедии про NTFS. Написано UTF-16. Ок, делаю mb_convert_encoding в UTF-16 из UTF-8. Переименовываю - не получается (уже не помню, то ли опять левый символ получился, то ли Warning появился).
Начал пытаться выяснять, в какой кодировке вообще хранит винда такие специальные символы (ведь они показываются нормально!). Пробовал три разных php-команды (scandir, dir, readdir), чтобы записать символ в чистом виде в отдельный файл и проанализировать. Смотрю, в итоге символ становится "?" (знаком вопроса). Думаю, может просто отображается неправильно. Открыл в хекс-редакторе - и вправду знак вопроса (3F вроде). То есть стандартные функции пхп не смогут прочитать папку, в которой файлы со специальными символами (кстати русские символы читает).
И как собственно с этим жить? Во-первых как массово переименовать файлы, во-вторых как читать папку, в которой файлы со спец названиями? И какая в конце концов кодировка у названий файлов в NTFS!?
Прочитал в википедии про NTFS. Написано UTF-16. Ок, делаю mb_convert_encoding в UTF-16 из UTF-8. Переименовываю - не получается (уже не помню, то ли опять левый символ получился, то ли Warning появился).
Начал пытаться выяснять, в какой кодировке вообще хранит винда такие специальные символы (ведь они показываются нормально!). Пробовал три разных php-команды (scandir, dir, readdir), чтобы записать символ в чистом виде в отдельный файл и проанализировать. Смотрю, в итоге символ становится "?" (знаком вопроса). Думаю, может просто отображается неправильно. Открыл в хекс-редакторе - и вправду знак вопроса (3F вроде). То есть стандартные функции пхп не смогут прочитать папку, в которой файлы со специальными символами (кстати русские символы читает).
И как собственно с этим жить? Во-первых как массово переименовать файлы, во-вторых как читать папку, в которой файлы со спец названиями? И какая в конце концов кодировка у названий файлов в NTFS!?