Просто обновляю этот вопрос к 2018 году.
Невероятно, ActivePerl 5.24 все еще не поддерживает просто передачу путей Unicode в open()
/ mkdir()
и расширением File::Path::mkpath()
, потому что базовый код Perl по-прежнему вызывает версию ASCII 20-го века Windows CreateFile()
. Безумие! Как это могло быть не более высоким приоритетом, чем бесчисленные неясные изменения Perl, сделанные за прошедшие 10 лет?!
Это верно даже , если вы используете utf8; или множество других заклинаний.
Так что даже сегодня у нас все еще должен быть специальный код для Windows для этой самой основной функции (создание / доступ к именам файлов Unicode).
К счастью, модуль Win32::Unicode
имеет приятную, простую в использовании функцию Win32::Unicode::Dir::mkpathW()
, которая делает именно то, что вам нужно, и работает для Unicode (а также великолепные функции copyW()
и moveW()
).
К сожалению, этот модуль не прошел свои тесты установки с тех пор, как Perl 5.16 и ActiveState удалили его из удобного репозитория ppm (https://code.activestate.com/ppm/Win32-Unicode/).
К счастью, есть способ заставить его работать, так как 3 теста, которые не пройдены (относящиеся к «печати»), не используются для создания файла / каталога:
Шаг 1: ppm install dmake
Шаг 2: ppm install MinGW
Шаг 3: perl -MCPAN -e shell
, затем force install Win32::Unicode
Шаг 1 и 2 обязательны, даже если на вашем компьютере уже установлена Microsoft Visual Studio; очевидно, Perl теперь собран с MinGW, и модули тоже должны быть.
Уф.