如何使用Perl在Windows中创建unicode文件名

Arc*_*ano 6 windows unicode perl

我有以下代码

use utf8;
open($file, '>:encoding(UTF-8)', "?????.txt") or die $!;
print $file "?????";
Run Code Online (Sandbox Code Playgroud)

但我得到的文件名为ã•ã,ã°,".",".txt

我想知道是否有一种方法可以让我的工作正如我所期望的那样(意思是我有一个unicode文件名),而不需要使用Win32 :: API,Win32API ::*或移动到另一个平台并使用Samba共享来修改文件.

目的是确保我们没有任何需要加载的Win32特定模块(甚至是有条件的).

ike*_*ami 6

Perl将文件名视为不透明的字节字符串.它们需要根据"语言环境"的编码(ANSI代码页)进行编码.

在Windows中,这通常是cp1252.它由GetACP系统调用返回.(前缀"cp").但是,cp1252不支持日文字符.

Windows还提供"Unicode"又称"宽"接口,但Perl不提供使用内置*的访问权限.但是,您可以使用Win32API :: File CreateFileW.IIRC,你还需要自己编码文件名.如果是这样,您将UTF-16le用作编码.

* - Perl对Windows的支持在某些方面很糟糕.