ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Perl unicode
@ 2004-10-21  9:18 Stanislav Yadykin
  2004-10-22  8:48 ` Stanislav Yadykin
  2004-10-22 14:25 ` Alexey Tourbin
  0 siblings, 2 replies; 8+ messages in thread
From: Stanislav Yadykin @ 2004-10-21  9:18 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1871 bytes --]

Добрый день!
Поскольку у моего аплинка временная проблема с ru.perl, решил написать сюда, 
возможно кто-то сталкивался/знает.
Есть программа:
==============================
use Net::Jabber qw(Client);
use Text::Iconv;

my $jabber = new Net::Jabber::Client;
$jabber->Connect(hostname => 'host');
my @status = $jabber->AuthSend(
  'username'  => 'user',
  'password'  => 'password',
  'resource'  => 'client'
);
$jabber->PresenceSend('type' => 'available');
$jabber->SetCallBacks('message' => \&JabberGetMessage);

while($jabber->Process){ 1; }

sub fUni {
  my $conv = Text::Iconv->new('utf8', 'windows-1251');
  return $conv->convert(shift);
}
sub tUni {
  my $conv = Text::Iconv->new('windows-1251', 'utf8');
  return $conv->convert(shift);
}

sub JabberGetMessage {
  my $id = shift;
  my $message = shift;
  my $from = fUni($message->GetFrom);
  my $subj = fUni($message->GetSubject);
  my $body = fUni($message->GetBody);
  $jabber->MessageSend(
    To => 'newuser@newhost',
    Subject => tUni($subj),
    Body => tUni($body)
  )
}
==============================

При отсылке жаббером текста "тест", проходя через этот "жаббер-прокси" 
приходит в виде "Ñ,есÑ,", т.е. почему-то проходит двойную конертацию в 
юникод. Если процедуру JabberGetMessage переписать в виде 

sub JabberGetMessage {
  my $id = shift;
  my $message = shift;
  $jabber->MessageSend(
    To => 'newuser@newhost',
    Subject => $message->GetSubject,
    Body => $message->GetBody
  )
}

то к клиенту возвращается нормальный "тест". В чем может быть проблема?
-- 
Stanislav Yadykin

[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Comm] Perl unicode
  2004-10-21  9:18 [Comm] Perl unicode Stanislav Yadykin
@ 2004-10-22  8:48 ` Stanislav Yadykin
  2004-10-22 13:58   ` [Comm] " Alexey Tourbin
  2004-10-22 14:25 ` Alexey Tourbin
  1 sibling, 1 reply; 8+ messages in thread
From: Stanislav Yadykin @ 2004-10-22  8:48 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 618 bytes --]

В сообщении от Четверг, 21-Окт-2004 12:18 Stanislav Yadykin написал(a):
> При отсылке жаббером текста "тест", проходя через этот "жаббер-прокси"
> приходит в виде "Ñ,есÑ,", т.е. почему-то проходит двойную конертацию в
> юникод. Если процедуру JabberGetMessage переписать в виде

perl bug?
Почему он за меня решает, включать ему use utf8 или нет?
в багзиллу?

-- 
Stanislav Yadykin
ALT Linux Team

[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Comm] Re: Perl unicode
  2004-10-22  8:48 ` Stanislav Yadykin
@ 2004-10-22 13:58   ` Alexey Tourbin
  2004-10-22 14:51     ` Stanislav Yadykin
  0 siblings, 1 reply; 8+ messages in thread
From: Alexey Tourbin @ 2004-10-22 13:58 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 552 bytes --]

On Fri, Oct 22, 2004 at 11:48:24AM +0300, Stanislav Yadykin wrote:
> В сообщении от Четверг, 21-Окт-2004 12:18 Stanislav Yadykin написал(a):
> > При отсылке жаббером текста "тест", проходя через этот "жаббер-прокси"
> > приходит в виде "??,??µ??????,", т.е. почему-то проходит двойную конертацию в
> > юникод. Если процедуру JabberGetMessage переписать в виде
> 
> perl bug?
> Почему он за меня решает, включать ему use utf8 или нет?

use utf8 -- это не то, что вы подумали.

> в багзиллу?
> 
> -- 
> Stanislav Yadykin
> ALT Linux Team

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Comm] Re: Perl unicode
  2004-10-21  9:18 [Comm] Perl unicode Stanislav Yadykin
  2004-10-22  8:48 ` Stanislav Yadykin
@ 2004-10-22 14:25 ` Alexey Tourbin
  2004-10-22 14:50   ` Stanislav Yadykin
  2004-10-25  6:00   ` Mike Lykov
  1 sibling, 2 replies; 8+ messages in thread
From: Alexey Tourbin @ 2004-10-22 14:25 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 952 bytes --]

On Thu, Oct 21, 2004 at 12:18:27PM +0300, Stanislav Yadykin wrote:
> При отсылке жаббером текста "тест", проходя через этот "жаббер-прокси" 
> приходит в виде "??,??µ??????,", т.е. почему-то проходит двойную конертацию в 
> юникод. Если процедуру JabberGetMessage переписать в виде 
> 
> sub JabberGetMessage {
>   my $id = shift;
>   my $message = shift;
>   $jabber->MessageSend(
>     To => 'newuser@newhost',
>     Subject => $message->GetSubject,
>     Body => $message->GetBody
>   )
> }
> 
> то к клиенту возвращается нормальный "тест". В чем может быть проблема?

Лучше не использовать Text::Iconv вместе с нативным utf8.
По крайней мере нижеследующее у меня не работает:

$ perl -MText::Iconv -le 'my $text="текст"; utf8::encode $text; print Text::Iconv->new("utf8", "windows-1251")->convert($text)'

$

Может быть дело в том, что XML::Stream использует
use open ':utf8'

Кто знает...

> -- 
> Stanislav Yadykin

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Comm] Re: Perl unicode
  2004-10-22 14:25 ` Alexey Tourbin
@ 2004-10-22 14:50   ` Stanislav Yadykin
  2004-10-22 15:58     ` Alexey Tourbin
  2004-10-25  6:00   ` Mike Lykov
  1 sibling, 1 reply; 8+ messages in thread
From: Stanislav Yadykin @ 2004-10-22 14:50 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1268 bytes --]

В сообщении от Пятница, 22-Окт-2004 17:25 Alexey Tourbin написал(a):
> Лучше не использовать Text::Iconv вместе с нативным utf8.
> По крайней мере нижеследующее у меня не работает:
>
> $ perl -MText::Iconv -le 'my $text="текст"; utf8::encode $text; print Text::Iconv->new("utf8", "windows-1251")->convert($text)'

Ээээ... вообще-то

utf8::encode($string)
           Converts in-place the octets of the $string to the octet sequence in Perl's
UTF-X encoding.  Returns nothing.  Note that this does not change the "type" of
$string to UTF-8, and that this handles only ISO 8859-1 (or EBCDIC) as the source
character set. Therefore this should not be used to convert a legacy 8-bit encoding
to Unicode: use Encode::decode() for that.  

А вот если
-(~:$)-> perl "-MEncode('from_to')" -MText::Iconv -le 'my $text="текст"; from_to($text, "windows-1251", "utf8"); print Text::Iconv->new("utf8", "windows-1251")->convert($text)'
текст

> Может быть дело в том, что XML::Stream использует
> use open ':utf8'
Смотрел, но подобного ничего нет.

-- 
Stanislav Yadykin
ALT Linux Team

[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Comm] Re: Perl unicode
  2004-10-22 13:58   ` [Comm] " Alexey Tourbin
@ 2004-10-22 14:51     ` Stanislav Yadykin
  0 siblings, 0 replies; 8+ messages in thread
From: Stanislav Yadykin @ 2004-10-22 14:51 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1528 bytes --]

В сообщении от Пятница, 22-Окт-2004 16:58 Alexey Tourbin написал(a):
> On Fri, Oct 22, 2004 at 11:48:24AM +0300, Stanislav Yadykin wrote:
> > В сообщении от Четверг, 21-Окт-2004 12:18 Stanislav Yadykin написал(a):
> > > При отсылке жаббером текста "тест", проходя через этот "жаббер-прокси"
> > > приходит в виде "??,??µ??????,", т.е. почему-то проходит двойную
> > > конертацию в юникод. Если процедуру JabberGetMessage переписать в виде
> >
> > perl bug?
> > Почему он за меня решает, включать ему use utf8 или нет?
>
> use utf8 -- это не то, что вы подумали.
Я подумал правильно, выразился криво :)

Почему тогда возникает такая же ситуация с выводом апача (mod_perl), когда 
где-то используется XML::Parser? Стоило только SOAP::Lite указать 
использовать вместо XML::Parser XML::Parser::Lite, как такая же перекодировка 
вывода пропала.
Я просто не могу найти ту точку или решение, на которое в данном случае стоит 
обратить винмание чтобы снять этот вопрос.

-- 
Stanislav Yadykin
ALT Linux Team

[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Comm] Re: Perl unicode
  2004-10-22 14:50   ` Stanislav Yadykin
@ 2004-10-22 15:58     ` Alexey Tourbin
  0 siblings, 0 replies; 8+ messages in thread
From: Alexey Tourbin @ 2004-10-22 15:58 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 907 bytes --]

On Fri, Oct 22, 2004 at 05:50:56PM +0300, Stanislav Yadykin wrote:
> А вот если
> -(~:$)-> perl "-MEncode('from_to')" -MText::Iconv -le 'my $text="текст"; from_to($text, "windows-1251", "utf8"); print Text::Iconv->new("utf8", "windows-1251")->convert($text)'
> текст

Да, так правильно.

> > Может быть дело в том, что XML::Stream использует
> > use open ':utf8'
> Смотрел, но подобного ничего нет.

$ rpm -qR perl-Net-Jabber |grep Stream
perl(XML/Stream.pm) >= 0:1.18
$ rpm -ql perl-XML-Stream |xargs grep utf8
/usr/lib/perl5/vendor_perl/XML/Stream.pm:        eval("use open ':utf8';");
/usr/lib/perl5/vendor_perl/XML/Stream/Parser.pm:        eval("use open ':utf8';");
/usr/lib/perl5/vendor_perl/XML/Stream/Parser.pm:        open(FILE,"<:utf8",$fileName);
/usr/share/doc/perl-XML-Stream-1.21/CHANGES:    that the outgoing data is utf8.
$

> -- 
> Stanislav Yadykin
> ALT Linux Team

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Comm] Re: Perl unicode
  2004-10-22 14:25 ` Alexey Tourbin
  2004-10-22 14:50   ` Stanislav Yadykin
@ 2004-10-25  6:00   ` Mike Lykov
  1 sibling, 0 replies; 8+ messages in thread
From: Mike Lykov @ 2004-10-25  6:00 UTC (permalink / raw)
  To: community

В сообщении от Пятница 22 Октябрь 2004 19:25 Alexey Tourbin написал:

> Лучше не использовать Text::Iconv вместе с нативным utf8.
> По крайней мере нижеследующее у меня не работает:
>
> $ perl -MText::Iconv -le 'my $text="текст"; utf8::encode $text; print
> Text::Iconv->new("utf8", "windows-1251")->convert($text)'


my $converter=Text::Iconv->new('UTF-8', 'KOI8-R');                  
my $converted=$converter->convert($toconvert); 

У меня работает.

-- 
Mike Lykov
Samara, "Vesna" parfum company, System administrator 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-10-25  6:00 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-21  9:18 [Comm] Perl unicode Stanislav Yadykin
2004-10-22  8:48 ` Stanislav Yadykin
2004-10-22 13:58   ` [Comm] " Alexey Tourbin
2004-10-22 14:51     ` Stanislav Yadykin
2004-10-22 14:25 ` Alexey Tourbin
2004-10-22 14:50   ` Stanislav Yadykin
2004-10-22 15:58     ` Alexey Tourbin
2004-10-25  6:00   ` Mike Lykov

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git