1

Unicode に関するCWDモジュールが最新でないか、abs_path は OS への書き込み時にのみ使用することになっていますか?

#!/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 ☺
4

2 に答える 2

3

Cwdモジュールはchar *内部で型を使用するため、エンコーディングをまったく処理しません。一般に、ファイルシステムは、特殊文字('/'など)をエスケープする限り、ファイル名に使用する文字やエンコーディングを気にしません。

PerlにファイルパスがUTF-8であることを伝えたい場合は、それをエンコードできます。

use Encode qw(decode_utf8);

...
say decode_utf8(abs_path $file);
于 2012-03-02T10:20:58.270 に答える
1

Perl は、返すパスをデコードし、提供するパスをエンコードすることをあなたに任せます。(ヤッ!)

于 2012-03-02T09:21:36.270 に答える