Mam plik uchwyt otwarty w pliku z cp1252 znaków w nim. Chcę udostępnić ten otwarty uchwyt pliku do biblioteki, która oczekuje surowych bajtów utf8, wyśle je przez sieć.Perl konwertuj uchwyt pliku w miejscu/przesyłanie strumieniowe z cp1252 na utf-8?
Naiwny sposób to zrobić byłoby zapisać plik z drugiego pliku z prawej kodowania i dać drugą uchwytu pliku do biblioteki:
use Fcntl qw/SEEK_SET/;
open my $fh_1252, "<:encoding(cp1252)", "1252.txt" || die $!;
open my $fh_utf8, "+>:encoding(utf8)", "utf8.txt" || die $!;
while (<$fh_1252>){ print $fh_utf8 $_ };
seek($fh_utf8, 0, SEEK_SET);
# now give $fh_utf8 to the library for transmission
który wydaje się jak banda dodatkowej pracy . Czy istnieje sposób, aby po prostu przesyłać strumieniowo? Wiem, że mógłbym użyć IO :: Scalar, aby usunąć potrzebę zapisu na dysk, ale nadal musiałbym czytać całość w pamięci. Wygląda na to, że istnieje sposób na przeskanowanie go potokiem, ale nie mam na myśli sposobu, by to zrobić teraz.
Mówisz o perl biblioteki lub braku Perl biblioteka/propgram? Czy mógłbyś nazwać swój system operacyjny (unix/windows)? – AnFi
Uwaga: 'otwórz ...," 1252.txt "|| die $ !; 'oznacza' otwórz ..., ("1252.txt" || die $!); '(który nigdy nie umiera). Chcesz 'otwórz ...,» 1252.txt «lub zgiń $ !;' – ikegami