Эта тема на forum.dklab.ru


Valery Shostak: Кодировка файловой системы
Здравствуйте.
Помогите, пожалуйста.

Из PHP нужно сохранить файл.
Файловая система — NTFS, операционная — Windows 7.
Но, непонятно, в какой кодировке это делать. UTF-8 и Windows-1251 не подходят.

file_put_contents(iconv('UTF-8', '???', 'Valery.Валерий.Валéрий'), '');

Поэтому, либо не сохраняет, либо сохраняет, но имя файла нечитабельно (Valery.Валерий.Валéрий).

Если создать такой файл вручную, то проблем нет.
Rumata:
866 или cp-866
Valery Shostak:
866
cp866 сохраняет как Valery.‚ «ҐаЁ©.‚ «
Rumata:
Ваш php-файл в какой кодировке?


<?php

# encoding UTF-8

$f = iconv('UTF-8', 'windows-1251//TRANSLIT', 'Valery.Валерий.Валéрий');

//echo $f;

file_put_contents($f, '');



Все работает:
Valery.Валерий.Вал'eрий
Valery Shostak:
Скрипт в UTF-8.
Ваш пример не работает: «é» и «'e» — не одно и то же.

P.S.: Вообще, вопрос задан мной на форуме «Денвера» не случайно. Причина здесь, скорее всего не в самом PHP, а в его конкретной сборке под Windows. Т.к. на Линуксе этот пример работает в UTF-8 без каких-либо дополнительных перекодирований.
Maus:
Ваш пример не работает: «é» и «'e» — не одно и то же.
Но символа «é» нет в cp1251.
Может, переформулировать тему на "Win7 и символы в именах файлов, не входящие в cp1251" ?
Maus:
попробовал тут, вот пока что вижу:
1) Файл с именем "éąæ.txt" в cmd виден как "ea?.txt" . И, похоже, это проблема - автокомплит такое имя игнорирует.
2) Решение с //TRANSLIT вполне себе решение, т.к. одинаковые строки после трансляции останутся одинаковыми.
Valery Shostak:
Может, переформулировать тему на "Win7 и символы в именах файлов, не входящие в cp1251" ?
Может, название темы и не совсем корректно, но cp1251 тут, вообще, не при чём.
Нужно сохранить средствами PHP в пакете «Денвера» файл с именем в формате UTF-8.
Транслитерация — не решение.
Maus:
Valery Shostak
попробуйте посмотреть в сторону directIO . Сишный код в Windows-версии PHP, похоже, не поддерживает имена файлов в UTF.

// Или так: код в PHP обращается к тем функциям WinAPI, которые не работают с UTF . Зато не надо собирать разные бинарники для Win98 и Win7

Эта тема на forum.dklab.ru