Thread View: pl.comp.lang.perl
2 messages
2 total messages
Started by yoawaoy@gmail.co
Fri, 07 Jun 2013 06:27
=?ISO-8859-2?Q?use_encoding_utf.Czy_da_siê_innaczej_??
Author: yoawaoy@gmail.co
Date: Fri, 07 Jun 2013 06:27
Date: Fri, 07 Jun 2013 06:27
54 lines
1250 bytes
1250 bytes
Czy da siê zmieniæ znaki diakrytyczne polskie na du¿e jeszcze przed encode ? Jak bym to teraz chcia³ zrobiæ wrzucaj±c uc befor encode to literki pl zosta³y by ma³ymi. W sumie to tego nie rozumiem dzia³ania do koñca :wewnêtrzne kodowanie mam prawdopodobnie unicode a mo¿e latin1 i chyba dlatego muszê wpierw zrobiæ encode by uc rozpoznawa³o poprawnie diakrytyki polskie .Czy to poprawny tok my¶lenia czy nie? #!/usr/bin/perl -w use Encode; #chardet wydaw_file.txt #wydaw_file.txt: utf-8 (confidence: 0.99) #file -i wydaw_file.txt #enca nie zwraca nic open(DS,"wydaw_file.txt"); while(<DS>){ #przerobienie tekstu na kodowanie wewnêtrzne $line=decode("utf-8",$_); $upline=uc $line; lookfor($upline);#Tu nie znajduje s³owo PO£O¯NICTWO ,ale znajduje GINEKOLOGIA.Wniosek nie znajduje s³ów z polskimi znakami diakrytycznymi #print encode("utf-8",$upline); $rt=encode("utf-8",$upline); #Tu w zasadzie cecha tego skryptu,przykladu .Po zakodowaniu na utf-8 da sie zamienic wszystkie litery na polskie. lookfor($rt);#Tu znajduje wyrazy z polskimi znakami diakrytycznymi } sub lookfor { my $line=shift; $line =~ /(PO£O¯NICTWO)/ig; print "Znaleziono:\|$1\|\n"; }
=?iso-8859-2?Q?Re:_use_encoding_utf.Czy_da_siê_innaczej_??
Author: Tomasz Konojacki
Date: Mon, 17 Jun 2013 21:50
Date: Mon, 17 Jun 2013 21:50
67 lines
1573 bytes
1573 bytes
Cze¶æ! yoawaoy@gmail.com wrote: > Czy da siê zmieniæ znaki diakrytyczne polskie na du¿e jeszcze przed encode ? > Jak bym to teraz chcia³ zrobiæ wrzucaj±c uc befor encode to literki pl zosta³y by ma³ymi. Da siê. Problem tkwi w tym, ¿e Perl nie wie jakie jest kodowanie pliku ze skryptem (traktuje go jako strumieñ bajtów, a nie tekst w UTF-8). Musisz mu powiedzieæ, ¿e jest inaczej, dodaj±c na pocz±tku tego skryptu nastêpuj±c± dyrektywê: use utf8; Gdy tej dyrektywy nie ma, ta linia: $line =~ /(PO£O¯NICTWO)/ig; jest ¼le interpretowana, poniewa¿ zawiera znaki spoza ASCII które s± interpretowane jako jakie¶ pozbawione sensu bajty, a nie, tak jak powinny, jako UTF-8. $rt=encode("utf-8",$upline); To w³a¶nie powoduje, ¿e $rt te¿ zawiera strumieñ bajtów, pozbawiony flagi UTF-8 i dlatego wtedy to "dzia³a". Pzdr, Tomasz PS. Dobrym zwyczajem jest nieu¿ywanie fileglobowych uchwytów plików. Czyli zamiast: open(DS,"wydaw file.txt"); daj: open(my $ds, "wydaw file.txt"); Podstawowym problemem z tymi pierwszym uchwytem jest to, ¿e jest on zawsze w globalnym zakresie, z czego mog± wynikn±æ ró¿ne, dziwne b³êdy, na przyk³ad: sub open_handle { open (A, '>', 'lol.txt'); } open_handle; print A "test"; To nie wy¶wietli b³êdu mimo i¿ wydawa³oby siê, ¿e A jest lokalne tylko dla funkcji open_handle. Nastêpuj±cy kod ju¿ wywo³a b³±d: sub open_handle { open (my $a, '>', 'lol.txt'); } open_handle; print $a "test"; PS2. strict i warnings nie bol± :) -- "Lisp has all the visual appeal of oatmeal with fingernail clippings mixed in." - Larry Wall
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads