Поддержка CWD Unicode - PullRequest
       23

Поддержка CWD Unicode

1 голос
/ 02 марта 2012

Является ли модуль CWD относительно Unicode устаревшим или abs_path предполагается использовать только при записи в ОС?

#!/usr/bin/env perl
use warnings;
use 5.012;
use utf8;
binmode STDOUT, ':encoding(utf-8)';
use Cwd qw(abs_path);
use File::Spec::Functions qw(rel2abs);

chdir '/tmp';

my $file = "Hello \x{263a}";

open my $fh, '>', $file or die $!;
say $fh 'test';
close $fh;

say abs_path $file;
say rel2abs $file;

выход:

# /tmp/Hello âº
# /tmp/Hello ☺

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Модуль Cwd использует типы char * для внутреннего использования и поэтому вообще не обрабатывает кодирование.Как правило, файловым системам не важно, какие символы или кодировки вы используете для имен файлов, если вы экранируете любые специальные символы (например, '/')

Если вы хотите сказать Perl, что путь к файлу указан в UTF-8, вы можете закодировать его:

use Encode qw(decode_utf8);

...
say decode_utf8(abs_path $file);
1 голос
/ 02 марта 2012

Perl предоставляет вам возможность декодировать возвращаемые пути и кодировать пути, которые вы предоставляете.(YUCK!)

...