我尝试使用make_path
创建目录名称UNICODE然后在这种情况下给出错误,但如果目录名称不是unicode,它可以正常工作。
my $UTF16_dirname = encode("UTF-16LE", "$FormattedPath\0");
make_path($UTF16_dirname);
答案 0 :(得分:1)
Perl有mkdir
但没有核心make_path
。我假设你的意思是File::Path
模块提供的功能?
您使用的是Windows吗? File::Path::make_path
使用Perl的mkdir
运算符,该运算符又使用不支持宽字符的(已弃用)Windows POSIX mkdir
调用。
我建议您安装Win32::Unicode::Dir
并使用{em> 支持宽字符的mkpathW
。安装测试有一些小问题,但似乎工作正常。
您应该传递一个使用Perl编码的简单字符串。您不需要decode
任何内容,只有在从非UTF-8源读取数据时才需要encode
。你也不应该追加一个尾随的NUL字符。你是用Perl编写的,而不是用C语言编写的。
这是一个例子
use utf8;
use strict;
use warnings;
use Win32::Unicode::Dir 'mkpathW';
mkpathW './कार्तिक' or die $!;