2015-04-24 16 views
5

Dlaczego encode usuwa przekazany argument, jeśli CHECK jest ustawione na wartość true?Dlaczego kodowanie usuwa argument?

#!/usr/bin/env perl 
use warnings; 
use strict; 
use utf8; 
use Encode; 

my $decoded = 'h'; 
if (eval { encode('utf-8', $decoded, 1); 1 }) { 
    print "|$decoded|\n"; # prints || 
} 

Odpowiedz

7

jest do stosowania w przypadku, gdy jesteś wielokrotnie przechodzącej ilości danych do encode lub decode. Chodzi o to, że funkcja usunie część tekstu, który przetłumaczyła, a ty musisz tylko dołączyć następny fragment do tego, co zostało. Przydaje się do obsługi kodowań wielobajtowych, które można podzielić na dwie części.

Jeśli nie chcesz tego zachowania, możesz LUB bit Encode::LEAVE_SRC do trzeciego parametru. Podoba Ci się to

use utf8; 
use strict; 
use warnings; 

use Encode qw/ encode decode FB_CROAK LEAVE_SRC /; 
use Data::Dump; 

my $decoded = 'ABC'; 
dd $decoded; 
my $encoded = encode('UTF-8', $decoded, FB_CROAK | LEAVE_SRC); 
dd $decoded; 
dd $encoded; 

wyjściu

"ABC" 
"ABC" 
"ABC" 
Powiązane problemy