我有以下代码
use utf8;
open($file, '>:encoding(UTF-8)', "さっちゃん.txt") or die $!;
print $file "さっちゃん";
但我得到的文件名为 ã•ã£ã¡ã‚ƒã‚“.txt
我想知道是否有一种方法可以像我期望的那样(意味着我有一个 unicode 文件名),而无需求助于 Win32::API、Win32API::* 或移动到另一个平台并使用 Samba共享以修改文件。
目的是确保我们没有任何需要加载的 Win32 特定模块(即使是有条件的)。
最佳答案
Perl 将文件名视为不透明的字节串。它们需要根据您的“区域设置”的编码(ANSI 代码页)进行编码。
在 Windows 中,这通常是 cp1252
。它由 GetACP
系统调用返回。 (前置“cp”)。但是,cp1252 不支持日文字符。
Windows 还提供了一个“Unicode”又名“Wide”接口(interface),但 Perl 不提供使用内置* 访问它的权限。不过,您可以使用 Win32API::File 的 CreateFileW
。 IIRC,您仍然需要自己对文件名进行编码。如果是这样,您将使用 UTF-16le
作为编码。
* — Perl 对 Windows 的支持在某些方面很糟糕。
关于windows - 如何使用 Perl 在 Windows 中创建 unicode 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992460/