Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: ivanatora в Feb 22, 2005, 15:16



Титла: Кирилица и Perl
Публикувано от: ivanatora в Feb 22, 2005, 15:16
Имам един смесен текст с латиница и кирилица (html страница). От нея изваждам разни неща и си ги подреждам. Проблема е че кирилските знаци май не съвпадата в \w  :0
Пример:
while ($splited[0] =~ m/name='(\d+)'>(\w*\s)/g){
print "$1 $2\n";
}
Това изписва само съвпаденията на латиница.
Нещо аз ли не правя като хората, или charset-а е виновен?  ???

[EDIT] use encoding 'cp1251'; реши проблема. Много обичам да намирам решението 10 мин след като съм оврънкал десет форума :)


Титла: Кирилица и Perl
Публикувано от: berov в Mar 07, 2005, 01:31
О, извинявай не видях последния ред, но долното сигурно ще е полезно и за някой друг.

Ами чарсета тие виновен май, особено ако е utf-8
Ако е така,  и ползваш пърл 5.8 внимавай много. имах си големи проблеми и аз. Та ако искаш да мапваш байтове знай, че кирилските символа са представени от 2 байта докато латинските - от един това си е от utf-8. аз още не съм си решил проблема но намерих в CPAN един модул encoding::warnings, който следи за имплицитни конверсии.
в документацията пише, че ако искаш да търсиш символи а не байтове трябва в скрипта да зададеш
Примерен код

use utf8;

но това само, когато скрипта ти е в тази кодова таблица, иначе ползвай
Примерен код

use encoding qw(енкодинга_които_ползваш);

попрочети документацията. аз четох доста, обаче проблема си го имам. иначе когато търся в низове нямам проблем с намирането щом съм задал
Примерен код

use utf8;

Та това е.
ето примери за търсене:
Дано ти свършат работа

Примерен код

    my $cyr = $string;    #original
    my $InCyrillic;
    if ( $string =~ /\p{InCyrillic}/g ) { $InCyrillic = 1; }
    #$string=~s/\p{IsSpace}/_/g;    #Any Space
    #$string=~s/\p{IsPunct}//g;      #Punctuation
    $string =~ s/\P{IsAlnum}//g;    # not Alphanumeric


Титла: Кирилица и Perl
Публикувано от: picmaster в Mar 08, 2005, 18:45
Най-гадното в цялата работа е, че винаги най-трудното решение на даден проблем е най-правилно... По принцип, UTF-8 е вариант, който е за предпочитане при многоезична среда/софтуер, само че проблема обикновено се крие в библиотеките които работят със символните низове :( . Примерно в GTK+ проблема е решен, като вътрешно се работи винаги със UTF-8, всички обработки на низове са в UTF-8, а към програмиста вече се вижда преобразуван към текущия
локал текст. В Qt идеята е същата. Още един бляскав пример за перфектна многоезична поддръжка с UTF-8 e Мозила. Ако искаш да подходиш професионално, ще трябва да поддържаш тази кодировка. Само че в България, всички ги мързи (както и мен :) ), и затова лесно-лесно претупват нещата със CP1251, KOI-8R, KOI-8U...