🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #51947

Re: "Piekło" kodowania ...

#51947
From: mrek
Date: Wed, 14 Jul 2010 19:03
69 lines
3558 bytes
Dnia Wed, 14 Jul 2010 08:51:08 +0000, Maciej Zielenkieiwcz napisał(a):

> On 2010-07-13 23:43, mrek <marq@iq.pl> wrote:
>> Witam wszystkich chcących pomagać w taki czy inny sposób ;-).
>>
>> Toczę nierówną walkę z fragmentem skryptu, który w założeniu ma zmienić
>> kodowanie treści wiadomości pocztowej (tekstu) do CP1250. Tekst ten
>> zostanie w dalszej części użyty do przygotowania wydruku, stąd potrzeba
>> użycia strony kodowej win.
>> Skrypt który próbuję popełnić pracował będzie pod Win.
>>
>>
>> Wysyłam sobie mailem zestaw polskich znaków diakrytycznych duże i małe
>> litery w ramach testu.
>>
>> Odbieram wiadomość za pomocą Net-POP3.
>>
>> Wyciągam treść wiadomości (tekst) i dostaję go w postaci z RFC czyli
>>=CA=D3=A1=A6=A3=AF=AC=C6=D1 =EA=F3=B1=B6=B3=BF=BC=E6=F1
>>
>> poniżej kawałek skryptu w którym ćwiczę samą konwersję i utknąłem
>>
>> #!/usr/bin/perl -w
>>
>> use strict;
>> use locale;
>> use Encoding;
>>
>> use Data::Dumper qw(Dumper);
>> use Encode qw(find_encoding encode decode from_to); use
>> MIME::QuotedPrint;
>>
>> $Data::Dumper::Maxdepth = 2;
>> $Data::Dumper::Indent   = 0;
>>
>> our $tekst = '=CA=D3=A1=A6=A3=AF=AC=C6=D1 =EA=F3=B1=B6=B3=BF=BC=E6=F1';
>>
>> our $tekst_zdekodowany = decode_qp($tekst); działanie tej funkcji daje
>> zestaw znaków ĘÓˇ??ŁŻ??ĆŃ ęó????łżĽćń przypisania dla strony kodowej
>> iso-8859-2 w tym miejscu zamieram bo dalsze linie nic nie zmieniają
>>
>   our $tekst_in_octets = decode("iso-8859-2", $tekst_zdekodowany);
>>
>   print encode("cp1250", $tekst_in_octets);
>>
>> 1;
>> ------------------------
>>
>> dla fontów windowsowych potrzebne jest CP1250
>>
>> Czy ktoś ma jakiś pomysł bo ja już straciłem dystans do tego i nie
>> widzę może prostego rozwiązania.
> 
> Owszem, trzeba zamienić miejscami encode() i decode (patrz wyżej). One
> robią to co mają w nazwie ;-).

Dziękuję za "światło" nauki. Za sprowadzenie mnie z myślowych manowców. ;-)
W takim razie dokumentacja Encode wprowadza lekkie zamieszanie.
Wg mojego rozeznania dekodowanie odtwarza z nieczytelnej postaci
do czytelnej a tutaj jest jakby odwrotnie. 
Dokumentacja podaje że decode zwraca string a nie sekwencję
bitowo kodowanych znaków. I podobnie jest z encode tzn. odwrotnie ;-).
Dlatego idąc tym tropem zbłądziłem i błądziłem próbując
mnóstwo wariantów, oczywiście oprócz tego właściwego podejścia.

Podane rozwiązanie oczywiście zadziałało ;-)

Pozdrawiam.
Marek
Technical Details
Message-ID: <4c3e09e3$0$2596$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <4c3cfa30$0$17099$65785112@news.neostrada.pl> <i1jtps$6v8$1@io.staszic.waw.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.giganews.com!nntp.giganews.com!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: mrek <marq@iq.pl>
Subject: Re: "Piekło" kodowania ...
Newsgroups: pl.comp.lang.perl
References: <4c3cfa30$0$17099$65785112@news.neostrada.pl> <i1jtps$6v8$1@io.staszic.waw.pl>
User-Agent: Pan/0.132 (Waxed in Black)
MIME-Version: 1.0
Date: 14 Jul 2010 19:03:00 GMT
Lines: 69
Message-ID: <4c3e09e3$0$2596$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 95.48.69.238
X-Trace: 1279134180 unt-rea-a-02.news.neostrada.pl 2596 95.48.69.238:53374
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit