Nel*_*sog 5 directory unicode perl
我很难创建包含Unicode的目录名.我在Windows XP和Perl Camelbox 5.10.0上.
到目前为止,我曾经use File::Path qw ( make_path )
创建过目录 - 在第一个西里尔文目录出现之前一直运行良好.
Win32API::File qw ( CreateFileW )
如果文件名是UTF-16LE编码,文件工作正常.目录有类似的东西吗?或者也许是一个参数来告诉CreateFileW
创建Unicode路径,如果它不存在?
谢谢,
尼尔
Win32.pm提供了一个界面CreateDirectory
和朋友:
Win32::CreateDirectory(DIRECTORY)
创建
DIRECTORY
并在成功时返回true值.检查$^E
扩展错误信息的失败.DIRECTORY可能包含系统代码页之外的Unicode字符.创建目录后,您可以使用
Win32::GetANSIPathName()
获取可以传递给系统调用和外部程序的名称.
注意:保留此信息用于记录,因为您试图CreateDirectoryW
直接在程序中使用.
要手动执行此操作,请CreateDirectoryW
使用Win32 :: API导入:
Win32::API->Import(
Kernel32 => qq{BOOL CreateDirectoryW(LPWSTR lpPathNameW, VOID *p)}
);
Run Code Online (Sandbox Code Playgroud)
您需要对$path
for 进行编码CreateDirectoryW
:
#!/usr/bin/perl
use strict; use warnings;
use utf8;
use Encode qw( encode );
use Win32::API;
Win32::API->Import(
Kernel32 => qq{BOOL CreateDirectoryW(LPWSTR lpPathNameW, VOID *p)}
);
binmode STDOUT, ':utf8';
binmode STDERR, ':utf8';
my $dir_name = '??????????';
my $ucs_path = encode('UCS-2le', "$dir_name\0");
CreateDirectoryW($ucs_path, undef)
or die "Failed to create directory: '$dir_name': $^E";
Run Code Online (Sandbox Code Playgroud)
E:\> dir 2010/02/02 01:05 PM ?????????? 2010/02/02 01:04 PM ??????