Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > не работает lc


Автор: garmon4ik 28.11.2007, 01:41
Здравствуйте. Перечитал много сообщений на вашем форуме, переделал все , что советовали, но ничего не помогло/
Проблема:
вот  такой код
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "ru_RU.utf8");

print header (-type => 'text/html; charset=utf-8');

my $b=param('par');
my $s=lc($b);
print "$s";

не изменяет символы Кириллицы в верхнем регистре на символы в нижнем, ЧТО делать?

Хочу заметить, что вот такой код выдает правильный результат
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "ru_RU.utf8");

print header (-type => 'text/html; charset=utf-8');

my $b='ХОРОШО';
my $s=lc($b);
print "$s";
 т е изменяет регистр на нижний.

Автор: amg 28.11.2007, 12:46
Добавь код
Код

print map {"$_ ".ord($_)."<BR>"} split //, $b;
чтобы посмотреть, действительно ли в юникоде поступают данные

Автор: garmon4ik 28.11.2007, 16:26
результат 
Код

print map {"$_ ".ord($_)."<BR>"} split //, $b;
следующий

� 208
� 180
� 208
� 184
� 208
� 188
� 208
� 176

Что это означает? 

СпасибоИ вообще что нужно учесть, чтобы использовать функции работы со строками для Кириллицы

Автор: GoodBoy 29.11.2007, 18:15
Сделай на сервере вызов: locale -a и посмотри какие локали у тебя установлены. У меня, к примеру, локаль называется: "ru_RU.UTF-8". И потом пропиши в скрипте:
Код
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.UTF-8');
setlocale(LC_ALL, 'ru_RU.UTF-8');

должно заработать, если данные действительно в Юникоде.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)