Прежде всего, говорить «символ UTF-8» странно. UTF-8 может кодировать любой символ Unicode, поэтому набор символов UTF-8 является набором символов Unicode. Это означает, что вы хотите создать файл, имя которого содержит символы Unicode, а точнее, символы Unicode, которых нет в cp1252.
Я ответил об этом на PerlMonks в прошлом. Ответ скопирован ниже.
Perl обрабатывает имена файлов как непрозрачные строки байтов. Это означает, что имена файлов должны быть закодированы в соответствии с кодировкой вашей локали (кодовая страница ANSI).
В Windows обычно используется кодовая страница 1252
, поэтому кодировка обычно cp1252
. * Однако cp1252
не поддерживает символы тамильского и хинди [или "☺" ].
Windows также предоставляет интерфейс "Unicode" или "Wide", но Perl не предоставляет доступ к нему с помощью встроенных функций **. Вы можете использовать Win32API :: File CreateFileW
. IIRC, вам все равно нужно кодировать имя файла самостоятельно. Если это так, вы бы использовали UTF-16le
в качестве кодировки.
Вышеупомянутое Win32 :: Unicode , кажется, обрабатывает некоторые грязные задачи использования Win32API :: File для вас. Я также рекомендовал бы начать с этого.
* & mdash; Кодовая страница возвращается (как число) системным вызовом GetACP
. Для получения кодировки добавьте "cp
".
** & mdash; В некоторых случаях поддержка Perl для Windows отстой.