背景:
我有 2 台机器:一台运行德语 windows 7,我的 PC 运行英语(使用希伯来语区域设置)windows 7。
在我的 Perl 代码中,我试图检查我从德国机器获得的文件是否存在于我的机器上。
文件名为 ßßßzllpoöäüljiznppü.txt
为什么我执行以下代码时失败:
use Encode;
use Encode::locale;
sub UTF8ToLocale
{
my $str = decode("utf8",$_[0]);
return encode(locale, $str);
}
if(!-e UTF8ToLocale($read_file))
{
print "failed to open the file";
}
else
{
print $read_file;
}
当我试图打开文件时,同样的事情也会发生:
open (wtFile, ">", UTF8ToLocale($read_file));
binmode wtFile;
shift @_;
print wtFile @_;
close wtFile;
在我的 java 应用程序中,文件名从德语转换为 utf8,并传递给 perl 脚本。perl 脚本采用此文件名并将其从 utf8 转换为系统语言环境,请参阅 UTF8ToLocale($read_file) 函数调用,我相信这就是问题所在。
问题:
你能告诉我什么是操作系统文件系统字符集编码吗?
当我在操作系统中创建德语文件名时,语言环境是希伯来语,其中保存了字符集?
我该如何解决这个问题?
更新:
这是我在 PC 上使用硬编码文件名运行的另一个代码,脚本文件是 utf8 编码的:
use Encode;
use Encode::locale;
my $string = encode("utf-16",decode("utf8","C:\\TestPerl\\ßßßzllpoöäüljiznppü.txt"));
if (-e $string)
{
print "exists\r\n";
}
else
{
print "not exists\r\n"
}
输出是“不存在”。我还尝试了不同的字符集:cp1252、cp850、utf-16le,没有任何效果。如果我将文件名更改为英语或希伯来语(我的默认语言环境),它可以工作。有任何想法吗?