File :: Path :: make_path不能在Windows上使用Unicode字符串

时间:2015-02-18 07:27:13

标签: perl

我尝试使用make_path创建目录名称UNICODE然后在这种情况下给出错误,但如果目录名称不是unicode,它可以正常工作。

my $UTF16_dirname = encode("UTF-16LE", "$FormattedPath\0"); 

make_path($UTF16_dirname); 

1 个答案:

答案 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 $!;