我有以下
代码
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”又称“宽”接口,但Perl不提供使用内置*的访问权限.但是,您可以使用Win32API :: File的CreateFileW. IIRC,您还需要自己编码文件名.如果是这样,您将使用UTF-16le作为编码.
* – Perl对Windows的支持在某些方面很糟糕.