gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:25:45 25 4
gpt4 key购买 nike

我很难创建包含 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 的接口(interface)和 friend :

Win32::CreateDirectory(DIRECTORY)

Creates the DIRECTORY and returns a true value on success. Check $^E on failure for extended error information.

DIRECTORY may contain Unicode characters outside the system codepage. Once the directory has been created you can use Win32::GetANSIPathName() to get a name that can be passed to system calls and external programs.


上一个答案:
注:因为你试图使用 CreateDirectoryW,所以将其保留在这里作为记录。直接在你的程序中。
要手动执行此操作,请导入 CreateDirectoryW 使用 Win32::API :
Win32::API->Import(
Kernel32 => qq{BOOL CreateDirectoryW(LPWSTR lpPathNameW, VOID *p)}
);
您需要对 $path 进行编码对于 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";
E:\> 目录
2010/02/02 01:05 PM волгогра́д
2010/02/02 01:04 PM москва

关于perl - 如何使用 Perl 在 Windows 上创建 Unicode 目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2184726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com