【问题标题】:open file in folder with unicode name on Windows在 Windows 上使用 unicode 名称打开文件夹中的文件
【发布时间】: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


【解决方案1】:

【讨论】:

  • Win32::Unicode::File 工作非常简单,但不幸的是不适用于 Perl 5.18 :(。Path::Class::Unicode 看起来不错,但也因“无效参数”而失败。
  • “不起作用”是指由于一个微小的失败测试,​​它没有安装干净。我希望有人能够修补它,因为它是一个非常好的模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多