Czy za pomocą skryptu Perl zakodowanego w utf8 można otworzyć plik zakodowany jako GB2312?

Nie mówię o odczytywaniu zawartości pliku w kodowaniu utf-8 lub innym niż utf-8 i tym podobnych. Chodzi o nazwy plików. Zazwyczaj zapisuję mój skrypt Perla w domyślnym kodowaniu systemowym „GB2312” w moim przypadku i nie będę miał żadnych problemów z otwieraniem plików. Ale do celów przetwarzania mam teraz kilka plików skryptowych Perla zapisanych w kodowaniu utf-8. Problem polega na tym, że te skrypty nie mogą otworzyć plików, których nazwy składają się ze znaków zakodowanych w kodowaniu „GB2312” i nie podoba mi się pomysł zmiany nazwy moich plików.

Czy ktoś ma jakieś doświadczenie w radzeniu sobie z tego rodzaju sytuacją? Dziękuję jak zawsze za wszelkie wskazówki.

Edytować

Oto zminimalizowany kod do zademonstrowania mojego problemu:

# 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;
}

Ten skrypt testowy może działać dobrze, jeśli zostanie zapisany w kodowaniu „ANSI” (zakładam, że kodowanie ANSI jest takie samo jak GB2312, które jest używane do wyświetlania chińskich znaków). Ale nie zadziała, jeśli zostanie zapisany jako „UTF-8”, a komunikat o błędzie jest następujący:

Can't open './娴嬭瘯.txt' for reading: 'No such file or directory'.

W tym komunikacie ostrzegawczym „娴 嬭 瘯” są bezsensownymi znakami-śmieciami.

Aktualizacja

Próbowałem najpierw kodować nazwę pliku jako GB2312, ale wydaje się, że nie działa :( Oto, co próbowałem:

#!perl -w
use autodie;
use Encode;

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

while (<$in>){
print;
}

Moje obecne myślenie brzmi: nazwa pliku w moim systemie operacyjnym to 测试 .txt, ale jest zakodowana jako GB2312. W skrypcie Perla nazwa pliku wygląda tak samo dla ludzkich oczu, nadal 测试 .txt. Ale dla Perla są one różne, ponieważ mają różne wewnętrzne reprezentacje. Ale nie rozumiem, dlaczego problem nadal występuje, gdy już przekonwertowałem nazwę pliku w Perlu na GB2312, jak pokazano w powyższym kodzie.

Aktualizacja

Zrobiłem to, w końcu się udało :)

Sugestia @ briana jest właściwa. Popełniłem błąd w powyższym kodzie. Nie podałem nazwy zakodowanego pliku do pliku $.

Oto rozwiązanie:

#!perl -w
use autodie;
use Encode;

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

while (<$in>){
print;
}

questionAnswers(1)

yourAnswerToTheQuestion