LINUX.ORG.RU

perl UTF-8


0

0

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

★★★★★

Ответ на: комментарий от kranky

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

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

anonymous
()

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

INFOMAN ★★★★★
()

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

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

OxiD ★★★★
()

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

Eshkin_kot ★★
()

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

anonymous2 ★★★★★
()

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

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

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

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

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