相关疑难解决方法(0)

使用utf8编码的Perl脚本,它可以打开编码为GB2312的文件名吗?

我不是在谈论用utf-8或非utf-8编码和东西读取文件内容.这是关于文件名.通常我将Perl脚本保存为系统默认编码,在我的情况下为"GB2312",我不会有任何文件打开问题.但是出于处理目的,我现在有一些以utf-8编码保存的Perl脚本文件.问题是:这些脚本无法打开名称由"GB2312"编码编码的字符组成的文件,我不喜欢重命名文件的想法.

有没有人碰巧有处理这种情况的经验?总是感谢任何指导.

编辑

这是用于演示我的问题的最小化代码:

# I'm running ActivePerl 5.10.1 on Windows XP (Simplified Chinese version)
# The file system is NTFS

#!perl -w
use autodie;

my $file = "./??.txt"; #the file name consists of two Chinese characters
open my $in,'<',"$file";

while (<$in>){
print;
}
Run Code Online (Sandbox Code Playgroud)

如果以"ANSI"编码保存,则此测试脚本可以运行良好(我假设ANSI编码与用于显示中文字符的GB2312相同).但如果保存为"UTF-8"则不起作用,错误信息如下:

Can't open './???.txt' for reading: 'No such file or directory'.

在此警告消息中,"娴嬭瘯"是无意义的垃圾字符.

更新

我尝试首先将文件名编码为GB2312但它似乎不起作用:(这是我尝试的:

#!perl -w
use autodie;
use Encode;

my $file = "./??.txt";
encode("gb2312", decode("utf-8", $file));
open my $in,'<',"$file";

while (<$in>){
print;
}
Run Code Online (Sandbox Code Playgroud)

我目前的想法是:我的操作系统中的文件名是测试.txt,但编码为GB2312.在Perl脚本中,文件名与人眼看起来相同,仍然是测试.txt.但对于Perl来说,它们是不同的,因为它们具有不同的内部表示.但是我不明白为什么当我已经将Perl中的文件名转换为GB2312时问题仍然存在,如上面的代码所示.

更新 …

perl filenames encoding utf-8

1
推荐指数
1
解决办法
3958
查看次数

标签 统计

encoding ×1

filenames ×1

perl ×1

utf-8 ×1