如何使用Perl在Windows上创建Unicode目录?

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路径,如果它不存在?

谢谢,
尼尔

Sin*_*nür 6

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)

您需要对$pathfor 进行编码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              ??????