Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

use encoding utf.Czy da się innaczej ?

14 views
Skip to first unread message

yoa...@gmail.com

unread,
Jun 7, 2013, 9:27:04 AM6/7/13
to

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";

}

Tomasz Konojacki

unread,
Jun 17, 2013, 3:50:44 PM6/17/13
to
Cze��!

yoa...@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
0 new messages