[sisyphus] Re: Сортировка кириллицы вPerl
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вс Июн 15 23:06:40 MSD 2003
On Sun, Jun 15, 2003 at 05:25:46PM +0300, Michael Shigorin wrote:
> > 1. Сортировка:
> > #!/usr/bin/perl -w
> >
> > use strict;
> > use POSIX;
> > use locale;
> > use encoding 'cp1251';
> >
> > my @l1 = ("п", "р", "с", "т");
> > my @l2 = qw(п р с т);
> > print "$_(", ord, ") " foreach sort(@l1); print "\n";
> > print "$_(", ord, ") " foreach sort(@l2); print "\n";
> >
> > Вывод:
> > п(1087) т(1090) с(1089) р(1088) //?!
> > п(1087) р(1088) с(1089) т(1090)
Два разных результата? Этого просто не может быть.
> > Как всё это объясняется? В доках вроде ничего не нашел.
Дайте подумать. :)
Ну нужно сделать так: во-первых, use encoding 'utf-8'; encoding -- это
кодировка текста в скрипте. Во-вторых, IMHO для юникодных символов
настройки локали типа collate просто не нужны. Таблица символов utf-8
уже заранее отсортирована, а правила преобразования символов однозначны
и заранее известны. В таком случае use locale может что-нибудь ломать.
Короче,
#se locale;
use encoding 'utf-8';
так вроде всё работает.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20030615/662067be/attachment-0010.bin>
Подробная информация о списке рассылки Sisyphus