3

このスクリプトは、2倍の同じ出力を提供します。utf8 encodedecode2つの間に生き残れないエンコーディングはありsayますか?

#!/usr/bin/env perl
use warnings;
use 5.16.1;
use Encode qw/encode decode/;

my $my_encoding = 'ISO-8859-7';
binmode STDOUT, ":encoding($my_encoding)";

my $var = "\N{GREEK SMALL LETTER TAU}";
$var .= "\N{GREEK SMALL LETTER OMEGA WITH TONOS}";
$var .= "\N{GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA}";

$var = encode( 'utf8', $var );
$var = decode( $my_encoding, $var );

say $var;

my $test = encode( 'utf8', $var, Encode::FB_CROAK );
$var = decode( 'utf8', $test, Encode::FB_CROAK  );

say $var;
4

1 に答える 1

6

ターゲットエンコーディングの文字セットの範囲外の何かをエンコードしようとすると、それは鳴り響きます。

utf8は、72ビット文字を格納するためにPerlが使用するPerl固有のエンコーディングです。UTF-8に似ていますが、違います。Perlがサポートするすべての文字をサポートしているため、鳴くことがありません。

一方、を使用するUTF-8場合、Unicode文字ではないもの(例chr(0x200000))をエンコードしようとすると、それは鳴り響きます。

参照::encoding(UTF-8)vs :encoding(utf8)vs:utf8

于 2012-10-05T16:36:46.460 に答える