2012-10-05 3 views
1

이 스크립트는 두 번 동일한 출력을 내게 제공합니다. utf8encodedecode 사이에 두 개의 say 사이에 생존 할 수없는 인코딩이 있습니까?어떤 경우에 utf8 croak를 인 코드/디코드합니까?

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

대상 인코딩의 문자 집합 외부에있는 내용을 인코딩하려고하면 소리가납니다.

utf8은 Perl이 72 비트 문자를 저장하는 데 사용하는 Perl 별 인코딩입니다. UTF-8과 비슷하지만 다른 점이 있습니다. Perl이 지원하는 모든 문자를 지원하므로 절대로 부식되지 않습니다.

반면에 UTF-8을 사용하는 경우 유니 코드 문자가 아닌 다른 문자 (예 : chr(0x200000))를 인코딩하려고하면 부러 질 수 있습니다.

+0

'utf-8'이라고 쓰면 다른 인코딩에 대한 대답은 어떨까요? –

+0

나는 그 질문을 이해하지 못한다. – ikegami

+0

인코딩이 작동하는 경우 항상 동일한 인코딩으로 인코딩 및 디코딩해야합니다. 당신이 처음 시작한 것을 정확히 얻을 수는 없지만, 당신이 언제 그랬는지 모르겠습니다. – ikegami

관련 문제