2013-08-28 3 views
4

У меня есть папка на моем компьютере под управлением Windows 7 под названием «フ ォ ル ダ». В нем есть файл под названием «foo.txt», и я помещаю в него несколько строк текста. Я пытаюсь это прочитать, что, по-видимому, очень липкая проблема. Ответ на related question был простой выглядящий способ, чтобы открыть файл:открыть файл в папке с именем юникода в 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 $!; 

Звонок в open плашки с Invalid argument. Любая идея, какую конкретную проблему указывает это сообщение, и как я могу открыть этот файл с именем Unicode?

+3

Perl встроенные, такие как 'open' используют интерфейс« (A) NSI »для системы. Вам нужно будет закодировать строку согласно вашей кодовой странице ANSI, что, вероятно, невозможно для этих символов. Это означает, что вам нужно будет использовать интерфейс (W) ide, CreateFileW, как это предусмотрено Win32API :: File. Да, это отстой. – ikegami

+0

('CreateFile' также используется для открытия существующих файлов. Он создает файл * handle *.) – ikegami

+0

Теперь я попробовал кучу модулей для этого и поселился на Win32 :: LongPath. Автор очень отзывчив, и он просто работает. Я расскажу об этом позже. –

ответ

2

Использовать Win32::Unicode::Native или Path::Class::Unicode.

+0

'Win32 :: Unicode :: File' работает очень просто, но, к сожалению, не работает с Perl 5.18 :(. Path :: Class :: Unicode выглядит хорошо, но также не работает с« Недопустимый аргумент ». –

+0

И« не работа ", я имею в виду, что он не устанавливает чисто из-за одного крошечного неудачного теста. Надеюсь, кто-то сможет его исправить, потому что это очень хороший модуль. –

Смежные вопросы