LINUX.ORG.RU

perl UTF-8


0

0

Доброго времени. Неожиданно столкнулся с проблемой - нужно посчитать количество определённых символов (кирилицы) в строке. Строка может быть в любой кодировке. С помощью Encode::from_to я привожу строку к utf8, но возникает проблема с разбиением по отдельным символам через substr, английские он возвращает нормально, а вместо одного русского - 2 иероглифа.. попробовал upgrade и downgrade из utf8, но результата никакого =( Подскажите, как побороть кодировку или может есть более универсальный способ разбиения строки?

★★★★★

Ответ на: Re: perl UTF-8 от kranky

Re: perl UTF-8

> вот только что с этим делать не понял

Не использовать все эти гнушные изыски типа TeX, perl. Пользуйтесь Java - она с рождения юникодная.

anonymous ()

Re: perl UTF-8

В перле нет аналога phpшному mbstring?

INFOMAN ★★★★★ ()

Re: perl UTF-8

В перле есть прагма use bytes, которая говорит что вместо символов, нужно работать с байтами. Чтобы отключить надо сделать no bytes. Все эти прагмы тоже имеют область видимости, так что достаточно удобно. Непонятно только одно, по дефолту она и так выключена..

http://perldoc.perl.org/bytes.html

OxiD ★★★★ ()

Re: perl UTF-8

$ perl -CS -e 'use utf8; my $s = "Хлеб бел"; my $c = 0; $c++ while $s =~ /л/g; print "л - $c\n";'
л - 2

Eshkin_kot ★★ ()

Re: perl UTF-8

> С помощью Encode::from_to я привожу строку к utf8
а надо к примеру в UCS2

anonymous2 ★★★★★ ()

Re: perl UTF-8

все, кроме ешкинкота - не понимают, что говорят.

По топику - тебе нужен не from_to (который по определению дает _байтовую_ строку), а decode.

Плюс, убедись что то, что внутри y// у тебя тоже юникодное.

anonymous ()
Ответ на: Re: perl UTF-8 от anonymous

Re: perl UTF-8

> тебе нужен не from_to (который по определению дает _байтовую_ строку), а decode.

Спасибо огромное за помощь, decode подошёл как нельзя лучше )

Метод ёшкинакота тоже работает, но только очень медленный )

kranky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.