Добрый день,беру строку из базы в utf8, локаль utf8 скрипты в utf8.
lc($str) уменьшает регист только латинский букв.
Если добавлять прагмы
use utf8
use encoding UTF-8
use locale
перестают работать регулярные выражения.
Как заставить перл понимать кириллицу в utf8?
>Добрый день,
>
>беру строку из базы в utf8, локаль utf8 скрипты в utf8.
>lc($str) уменьшает регист только латинский букв.
>Если добавлять прагмы
>use utf8
>use encoding UTF-8
>use locale
>перестают работать регулярные выражения.
>Как заставить перл понимать кириллицу в utf8?Perl -- мегатупой язык! никакие use'ы не способны вправить ему мозг.
Самый надёжный способ -- перепаковать переменную с явным указанием, что
она UTF-ная. Вот так:
my $t = 'что-то в UTF'
# перепакуем
$t = pack 'U*', unpack 'U0U*', $t;
# преобразуем
print uc($t);
>
>Perl -- мегатупой язык! никакие use'ы не способны вправить ему мозг.
>Самый надёжный способ -- перепаковать переменную с явным указанием, что
>она UTF-ная. Вот так:
>my $t = 'что-то в UTF'
># перепакуем
>$t = pack 'U*', unpack 'U0U*', $t;
># преобразуем
>print uc($t);uc/lc действительно заработали, но появились другие проблемы:
Wide character in send at /usr/lib/perl/5.8/IO/Socket.pm line 218.
и при работе с dbm
>[оверквотинг удален]
>>она UTF-ная. Вот так:
>>my $t = 'что-то в UTF'
>># перепакуем
>>$t = pack 'U*', unpack 'U0U*', $t;
>># преобразуем
>>print uc($t);
>
>uc/lc действительно заработали, но появились другие проблемы:
>Wide character in send at /usr/lib/perl/5.8/IO/Socket.pm line 218.
>и при работе с dbmаа :)))
привет лари волу :-)
на самом деле у вас уже сейчас всё должно работать правильно,
но строго говоря, стратегия такая:my $t = 'читаем в UTF';
$t = pack 'U0C*', unpack 'C*', $t; # вот теперь перл понял, что оно в UTF
$t = uc($t) # работаем
$t = pack 'C*', unpack 'C0C*', $t; # теперь перл забыл, что оно в UTF и ему снова хорошо
print $t; # сохраняем $t куда нам надобросьте вы этот перл :-) помойка это :-)
>[оверквотинг удален]
>но строго говоря, стратегия такая:
>
>my $t = 'читаем в UTF';
>$t = pack 'U0C*', unpack 'C*', $t; # вот теперь перл понял,
>что оно в UTF
>$t = uc($t) # работаем
>$t = pack 'C*', unpack 'C0C*', $t; # теперь перл забыл, что
>оно в UTF и ему снова хорошо
>print $t; # сохраняем $t куда нам надо
>так и сделал, тупо переписал все строковые функции
>бросьте вы этот перл :-) помойка это :-)не могу бросить, в древние времена написал на нем большой проект
и теперь настало временя перевести его на utf тут гемор и вылез
>>бросьте вы этот перл :-) помойка это :-)
>
>не могу бросить, в древние времена написал на нем большой проект
>и теперь настало временя перевести его на utf тут гемор и вылез
>как я вас понимаю. тоже маюсь с ним и конца-края этому не видно.
жалко, что в девяностых не было питона и руби :-)
Что приятно в перле, что он отсеивает большую часть идиотов, вроде вас. К сожалению некоторые кроме врожденного слабоумия похоже еще имеют и ослиную упрямость. К сведению доморощенных дебилов, не способных прочитать и осмыслить perluniintro и perlunicode, первый релиз python был в 91-м, а Ruby в 93-м. А теперь домашнее задание, посмотреть когда в каждом из языков появилась поддержка юникода и как она выглядела, можете попробовать со словариком перевести фразу "Ruby currently lacks full support for Unicode, though it has partial support for UTF-8.", а также посмотреть запланированные фичи python3000 на эту тему.
>Что приятно в перле, что он отсеивает большую часть идиотов, вроде вас.
>К сожалению некоторые кроме врожденного слабоумия похоже еще имеют и ослиную
>упрямость. К сведению доморощенных дебилов, не способных прочитать и осмыслить perluniintro
>и perlunicode, первый релиз python был в 91-м, а Ruby в
>93-м. А теперь домашнее задание, посмотреть когда в каждом из языков
>появилась поддержка юникода и как она выглядела, можете попробовать со словариком
>перевести фразу "Ruby currently lacks full support for Unicode, though it
>has partial support for UTF-8.", а также посмотреть запланированные фичи python3000
>на эту тему.Вот это вы чего сейчас сказали? Это от большого ума чтоли? :-) Это он в такой форме из вас прёт? :-))) Попритдержите ум-то :-) Уверяю вас, ваш ум никому не интересен :-)
Действительно, что это я. Правы были древние - споря с дураком сам становишься дураком.
>Действительно, что это я. Правы были древние - споря с дураком сам
>становишься дураком.Ну спор-то как раз начали вы :-) рискованно :-)
А можно всё же вас побеспокоить вопросом?
Мне очень интересен портрет современного перловика, я надесь, что общение с вами позволит мне его дополнить. Вы не похвастаетесь, как давно вы программируете, что программируете?.. На мой взгляд, современные скрипт-программисты довольно чётко делятся на три группы:
1) Молодые люди (20-25), они не изучают Perl в принципе. Для быстрой разработки они используют PHP, для качественной -- Python (реже что-то другое).
2) Старые перловики, которые допускают, что в мире может ещё что-то произойти. Эти люди по-порежнему программируют на перл (уже больше десяка лет), но поглядывают в сторону более современных решений. Для таких людей не представляет труда написать C-расширение для руби.
3) Старые перловики, которые считают, что предел совершенства достигнут. Перл -- форева :-) Эти люди не изучают ничего нового.Если моя систематизация работает (а я работаю в организации, где работает примерно 5000 программистов; статистика имеется :-)), то вот ваш портрет (несколько штрихов с разных сторон :-)):
- вам 30-40 лет
- вы давно программируете на перл и давно не программируете ни на чём другом (ну может чуть-чуть PHP без объектов)
- вы не любите и не используете рекурсию
- вы не пользуетесь системами контроля версий (SVN/CVS) или пользуетесь очень ограниченно
- вы работете под виндовс и используете продвинутый редактор типа лультиедитора (угадал?)
- вы не умеете писать расширения перл (XS)
- вы не знаете чем отличает контестно-свободная грамматика от регулярной грамматики
- вы не знаете ничего о функциональном программировании (ну, может быть, только общие слова)
- вы поддерживаете очень старый и очень отвественный проект и не занимаетесь ни чем другим
- вы не доверяете людям
- возможно у вас есть подчинённый, но отношения с ним у вас не клеютсяхотя, возможен и другой вариант :-) вы просто работаете в очень маленькой конторке за $500-$800... тогда вы можете быть кем угодно... у вас нет ни подчинённых, ни крупных проектов, ни денег... вы просто не занимаетесь серьёзным программированием. хотя... нет-нет :-) как я мог допустить такую мысль? :-)
я буду очень признателен, если вы подтвердите или опровергните мою теорию.
>- вам 30-40 летчуть меньше
>- вы давно программируете на перл и давно не программируете ни на
>чём другом (ну может чуть-чуть PHP без объектов)нет, нет
>- вы не любите и не используете рекурсиюя не пихаю ее во все щели и хорошо представляю где она выгодна, а где противопоказана.
>- вы не пользуетесь системами контроля версий (SVN/CVS) или пользуетесь очень ограниченночаще всего SVN
>- вы работете под виндовс и используете продвинутый редактор типа лультиедитора (угадал?)нет, нет
>- вы не умеете писать расширения перл (XS)не было нужды, C/C++ владею, примеров XS кода достаточно, если будет нужда напишу.
>- вы не знаете чем отличает контестно-свободная грамматика от регулярной грамматикине отношу себя к "титиретикам"
>- вы не знаете ничего о функциональном программировании (ну, может быть, только
>общие слова)С общими концепциями знаком, часть из них может быть реализована в том же перле. Не было ни одного заказа связанного с функциональным языком. Нет смысла изучать языки без реальных заданий. Лемминги бегущие за модными веяниями смешат.
>- вы поддерживаете очень старый и очень отвественный проект и не занимаетесь
>ни чем другимда, нет
>- вы не доверяете людямВ чем именно? На всякий случай есть как минимум два значения у понятия "доверять"
>- возможно у вас есть подчинённый, но отношения с ним у вас
>не клеютсяКогда были особых проблем не возникало.
>хотя, возможен и другой вариант :-) вы просто работаете в очень маленькой
>конторке за $500-$800... тогда вы можете быть кем угодно... у вас
>нет ни подчинённых, ни крупных проектов, ни денег... вы просто не
>занимаетесь серьёзным программированием. хотя... нет-нет :-) как я мог допустить такую
>мысль? :-)нет
>я буду очень признателен, если вы подтвердите или опровергните мою теорию.Итого в большая часть утверждений неверна. Удачи в построении новых теорий :), а маны все таки почитайте.
Кстати очень интересно что за организация с 5000 программистов.
То же самое pack/unpack можно сделать менее производительно, но какбы прилично :-)
use Encode;
$t=decode_utf8($t);после этого с $t начнут работать и регэкспы и length и uc/lc... но это тоже самое, что pack/unpack
>То же самое pack/unpack можно сделать менее производительно, но какбы прилично :-)
>
>use Encode;
>$t=decode_utf8($t);
>
>после этого с $t начнут работать и регэкспы и length и uc/lc...
>но это тоже самое, что pack/unpackМожно так:
use Encode;
$t = decode("cp1251", "$t");
$t = uc($t);
$t = encode("cp1251", "$t");
МОжет так поможет))
$ttt=~ tr/А-Я/а-я/;
>МОжет так поможет))
>$ttt=~ tr/А-Я/а-я/;tr работает побайтово, а "А" в utf8 - это уже два байта.
Другими словами - сработает не так, как нам надо)
Можно так:
use Encode;
$t = encode_utf8(lc(decode_utf8($t)));