>>> От ругани-то я избавился, а вот как от кракозяблов-то избавиться? :)
>> Подобрать кодировку? Чисто методом тыка. Шут его знает, какая из них аське
>> нужна - если не ошибаюсь, у неё с кодировками проблемы хронические.
>> Поищите какую-нибудь документацию по протоколу OSCAR, может в ней что-нибудь полезное
>> отыщете.
> Да уже все "перетыкал", тупой протокол этот OSCAR!
> То ли дело джаббер :) есть мнение что сообщения надо кодировать в UTF16. не могу отвечать за то что все смогут прочитать это сообщение но мой друг нормально видит русский текст ) надеюсь что результаты ваших экспериментов это тоже подтвердят.
итак, русский текст в моей программе написан в кои8р и локаль у меня кои8р:
#!/usr/bin/perl -w
use Net::OSCAR qw(:standard);
use Encode;
use Data::Dumper;
use strict;
sub to_icq {
return encode("UTF16", decode("koi8-r", shift));
}
sub from_icq {
return encode("koi8-r", decode("UTF16", shift));
}
my $uin = "11111111111";
my $password = "xxxxxxxxxxx";
my $oscar;
my $decode_prefics = "\xFE\xFF";
my $mess1 = "Я больше не использую ICQ. Для связи со мной используйте Jabber [http://www.jabber.ru]. Мой JID аккаунт NuINu\@jabber.ru. Удачи!";
my $mess2 = to_icq($mess1);
sub im_in
{
my($oscar, $sender, $message, $is_away) = @_;
print "Get from $sender: ". from_icq($decode_prefics.$message) ."\n";
$oscar->send_im($sender, $mess2);
}
$oscar = Net::OSCAR->new();
$oscar->set_callback_im_in(\&im_in);
$oscar->signon($uin, $password);
while (1)
{
$oscar->do_one_loop();
}