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

标签 windows perl unicode

我有以下代码

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/

相关文章:

c++ - 宽字符窗口

c++ - 我的程序有一个保存配置文件的GUI,如何双击该配置文件直接用配置数据加载GUI?

c++ - 如何编写 C++ 控制台窗口程序

c++ - Visual C++ - 覆盖从 DLL 导入的函数?

cocoa - Objective C,转义 unicode 字符

perl - 这个 Perl 代码如何从数组中选择两个不同的元素?

perl - 将 CPAN 模块转换为 Debian 软件包的最佳方法是什么?

linux - 从 VBA 调用 Shell 返回值(whatever_cmd)

c++ - 支持和反对在跨平台库中专门支持 std::wstring 的论点

r - 如何生成所有可能的unicode字符?