2013-08-28 8 views
4

J'ai un dossier sur mon ordinateur USA Windows 7 intitulé "フ ォ ル ダ". Il y a un fichier appelé "foo.txt", et j'y ai mis quelques lignes de texte. J'essaie de le lire, ce qui est apparemment un problème très collant. Une réponse à une related question avait une méthode simple à la recherche d'ouvrir le fichier:ouvrir le fichier dans le dossier avec le nom unicode sous Windows

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 $!; 

L'appel à open meurt avec Invalid argument. N'importe quelle idée quel problème spécifique ce message indique, et comment je peux obtenir ce fichier unicode nommé ouvert?

+3

Les intégrations Perl telles que 'open' utilisent l'interface" (A) NSI "du système. Vous devrez encoder la chaîne selon votre page de code ANSI, ce qui est probablement impossible pour ces caractères. Cela signifie que vous devrez utiliser l'interface (W) ide, 'CreateFileW', fournie par Win32API :: File. Oui, ça craint. – ikegami

+0

('CreateFile' est aussi utilisé pour ouvrir des fichiers existants.) * – ikegami

+0

J'ai maintenant essayé un tas de modules pour cela, et je me suis installé sur Win32 :: LongPath. L'auteur est très réactif, et ça fonctionne. Je vais écrire plus de détails à ce sujet plus tard. –

Répondre

2
+0

'Win32 :: Unicode :: File' fonctionne vraiment simplement, mais malheureusement ne fonctionne pas avec Perl 5.18 :(. Path :: Class :: Unicode semble bien, mais échoue également avec" Argument invalide. " –

+0

Et par" ne pas Je veux dire qu'il ne s'installe pas correctement à cause d'un petit test qui a échoué, j'espère que quelqu'un pourra le patcher, parce que c'est un très bon module. –

Questions connexes