【发布时间】:2013-09-01 02:59:21
【问题描述】:
我的美国 Windows 7 计算机上有一个名为“フォルダ”的文件夹。里面有一个名为“foo.txt”的文件,我在里面放了几行文本。我正在尝试阅读它,这显然是一个非常棘手的问题。 related question 的答案有一个简单的打开文件的方法:
use utf8;
use Encode::Locale;
use Encode;
my $path = 'C:\Users\my name\Desktop\logrus_workspace\フォルダ\foo.txt';
my $new_path = encode(locale_fs => $path);
print $new_path;
open my $fh, '<', $new_path
or die $!;
对open 的调用以Invalid argument 终止。知道该消息表明什么具体问题,以及如何打开这个以 unicode 命名的文件?
【问题讨论】:
-
Perl 内建函数如
open使用系统的“(A)NSI”接口。您需要根据您的 ANSI 代码页对字符串进行编码,这对于这些字符来说可能是不可能的。这意味着您需要使用 Win32API::File 提供的 (W)ide 接口CreateFileW。是的,这很糟糕。 -
(
CreateFile也用于打开现有文件。它会创建一个文件句柄。) -
我现在已经为此尝试了一堆模块,并选择了 Win32::LongPath。作者反应非常好,而且效果很好。稍后我会写更多关于它的细节。
标签: perl file unicode filesystems filenames