Я пытаюсь создать несколько каталогов с именами Unicode в Windows. Имена правильно отображаются в браузере, но при создании каталога он преобразуется в текст мусора.
Я попытался перекодировать преобразования, удалив специальные символы.
$myfile = fopen("unicode.csv", "r") or die("Unable to open file!"); $lines = file("unicode.csv", FILE_IGNORE_NEW_LINES); echo '<table border="1">'; foreach($lines as $k=>$v){ $parts = preg_split('/[ ]/', $v); echo '<tr>'; foreach($parts as $key=>$val){ if($key==0){ $dir = str_replace("/", "", $val); $dir = str_replace("\", "", $dir); $encode = mb_detect_encoding($dir, mb_detect_order(), false); $dir = mb_convert_encoding($dir , 'UTF-8' , 'UTF-8'); echo '<td>'.$dir.'</td><td>'.$encode.'</td>'; $result = mkdir ($dir, "0777"); } echo '<td>'.$val.'</td>'; } echo '</tr>'; }
Ожидаемый результат - имя каталога должно быть читаемым в UTF-8.
Всего 1 ответ
Благодаря @eryksun:
Исходя из ваших результатов, похоже, что PHP mkdir не транскодирует из UTF-8 в собственную Windows UTF-16LE, чтобы вызвать [W] ide-символ CreateDirectoryW. Это, вероятно, просто вызывает C MKDIR. Это наивно передает байты в CreateDirectoryA, который декодирует имя UTF-8 с использованием системной [A] кодировки NSI (например, кодовой страницы 1252). Начиная с Windows 10, мы можем установить [A] NSI в UTF-8 в конфигурации локали системы. Это изменение требует перезагрузки.