Автор Тема: Кирилица и Perl  (Прочетена 2746 пъти)

ivanatora

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

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

berov

  • Напреднали
  • *****
  • Публикации: 40
    • Профил
    • WWW
Кирилица и Perl
« Отговор #1 -: 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
Активен

[Първото правило на магьосника:]
... Целта е несравнимо по-важно нещо от истината. Всъщност истината няма нищо общо с това.  Истината трудно се продава; тя не ти дава чувство за цел. Тя е просто истина

picmaster

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

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Perl & SuExec
Общ форум
asp 17 4997 Последна публикация Aug 10, 2011, 00:10
от gat3way
perl регулярен израз
Общ форум
qwerty11 3 2453 Последна публикация Feb 09, 2012, 22:52
от Demayl
Perl регулярен израз
Web development
qwerty11 8 5038 Последна публикация Jun 01, 2012, 14:10
от Demayl
Perl програмист за почасова работа
Търсене
vlindos 1 2752 Последна публикация Aug 31, 2012, 00:56
от vlindos
Съвет за редактор на Perl.
Идеи и мнения
elFO 23 7076 Последна публикация Dec 14, 2012, 01:25
от gat3way