Strona 1 z 1

[ruby] Kodowanie znaków.

: 21 wrz 2010, 12:09
autor: COVERek
Witam.

Mam taki oto skrypt do maili dla conky:

Kod: Zaznacz cały

#!/usr/bin/ruby
require 'net/imap'
# Stuff you can set
## If you can't figure out the first three, give up now
IMAP_USER = "coverek@xxxx.pl"
IMAP_PASS = "xxxxxx"
IMAP_SERVER = "mail.xxxx.pl"
## Are we using SSL?
SSL = true
## What port? Usually 993 for SSL
PORT = 993
# Use different method for calculating total messages on MS-Exchange
IS_EXCHANGE = false
## Which folder? Normally "INBOX" or "[Gmail]/All Mail" (for gmail)
IMAP_FOLDER = "INBOX"
## Maximum number of messages we want to show
MAX_MSG = 5 # Not yet implemented
## Output with conky formatting?
CONKYFIED = true
## Color choices
NEW_COLOR = "green"
SENDER_COLOR = "white"
SUBJ_COLOR = "grey"
CHARSET = "UTF-8"

def conkify(text,color)
    text = " ${color #{color}}#{text} $color"
    return text
end

def get_messages(conn)
    imap = conn
    imap.search(["NOT", "DELETED", "UNSEEN"]).each do |message_id|
        envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
        from, subject = envelope.from[0].name == nil ? envelope.from[0].mailbox : envelope.from[0].name, envelope.subject
        CONKYFIED == true ? puts("#{conkify(from,SENDER_COLOR)} $alignr#{conkify(subject,SUBJ_COLOR)}") : puts("#{from}  #{subject}")
    end
end

imap = Net::IMAP.new(IMAP_SERVER,port = PORT, usessl = SSL)
imap.login(IMAP_USER,IMAP_PASS)
imap.examine(IMAP_FOLDER)
IS_EXCHANGE == true ? counts = imap.search(["NOT", "DELETED", "UNSEEN"]).size : counts = imap.status(IMAP_FOLDER, ["UNSEEN"])["UNSEEN"]
counts > 0 ? ( puts("Nowe wiadomości: #{CONKYFIED == true ? conkify(counts,NEW_COLOR) : counts}"); get_messages(imap) ) : ( puts("${color grey}Brak nowych wiadomości") )
imap.disconnect
exit
Wynik owego skryptu to:

Kod: Zaznacz cały

${color white}COVERek $color $alignr ${color grey}=?utf-8?B?V2lhZG9tb8WbxIc=?= testowa. $color
Co zrobic zeby kodowanie w tytule bylo normalnie wyswietlane?

Odp: [ruby] Kodowanie znaków.

: 21 wrz 2010, 13:43
autor: Hauleth
Jeśli chodzi o kodowanie znaków to albo $KCODE = 'u' na początku lub -Ku do linii poleceń

Odp: [ruby] Kodowanie znaków.

: 21 wrz 2010, 13:49
autor: COVERek
Dałem tak:

Kod: Zaznacz cały

#!/usr/bin/ruby
require 'net/imap'
$KCODE = 'u'
# Stuff you can set
...
lub

Kod: Zaznacz cały

#!/usr/bin/ruby
require 'net/imap'
$KCODE = 'UTF8'
# Stuff you can set
...
Nic sie nie zminilo... :(


P.S.

Generalnie cos kulawo dziala...

Kod: Zaznacz cały

coverek@vbox:~$ ruby -KUe 'p "łódź"'
"łód\305\272"

Odp: [ruby] Kodowanie znaków.

: 21 wrz 2010, 19:49
autor: Hauleth
A daj ruby -Ku. Mi wtedy bardzo ładnie działa.

Odp: [ruby] Kodowanie znaków.

: 22 wrz 2010, 07:43
autor: COVERek

Kod: Zaznacz cały

coverek@vbox:~/.skrypty$ ruby -Ku imap.rb 
${color grey}Nowe wiadomości:  ${color green}1 $color
 ${color white}COVERek $color $alignr ${color grey}=?utf-8?B?V2lhZG9tb8WbxIc=?= testowa. $color
Hm... Nie hula.

Ale z tego co na necie wyczytalem, jest tutaj problem ze zczytywaniem maili i kodowaniem przez imapa... Ale za cholere nie wiem jak to zrobic.

----

Zainstalowalem ruby1.9, bo niby on juz potrafi to rokodowac to daje mi takie cos...

Kod: Zaznacz cały

 
coverek@vbox:~/.skrypty$ ./imap.rb 
/usr/lib/ruby/1.9.0/net/imap.rb:1275:in `create_ssl_params': uninitialized constant Net::IMAP::VERIFY_PEER (NameError)
	from /usr/lib/ruby/1.9.0/net/imap.rb:924:in `rescue in initialize'
	from /usr/lib/ruby/1.9.0/net/imap.rb:917:in `initialize'
	from ./mail.rb:43:in `new'
	from ./mail.rb:43:in `<main>'
i jeszcze na marginesie...

Kod: Zaznacz cały

coverek@vbox:~/.skrypty$ ruby -KUe 'p "łódź"'
"łód\305\272"
coverek@vbox:~/.skrypty$ ruby1.9 -KUe 'p "łódź"'
"łódź"

Odp: [ruby] Kodowanie znaków.

: 22 wrz 2010, 20:27
autor: Hauleth
Bo ruby 1.9 o ile dobrze pamiętam to z automatu leci po UTF-8

Odp: [ruby] Kodowanie znaków.

: 22 wrz 2010, 23:39
autor: rack
Kcode to w ruby 1.8.6 lub 1.8.7.

Kodowanie pliku źródłowego w 1.9.x możesz sobie ustawić tak:

Kod: Zaznacz cały

# coding:utf-8
wrzuć to w drugą linię po shebangu.

Odpal sobie ten przykład u siebie i zobacz czy są błędy:

http://www.devdaily.com/blog/post/ruby/ ... rch-fields

Versie 1.9.1 krzaczą. Jak masz czas to zainstaluj najnowszą dostępną i zobacz jak to działa. Imapa dawno nie używałem ale też nie pamiętam abym miał z tym jakiś kłopot ...

pozdrawiam

Odp: [ruby] Kodowanie znaków.

: 23 wrz 2010, 21:16
autor: Hauleth
Sic. @COVERek mówię ci jasno, że u ma być małe pisz do cholery ruby -Kue 'p "Zażółć gęślą jaźń"'.

Odp: [ruby] Kodowanie znaków.

: 29 wrz 2010, 11:57
autor: Radarek
Kodowania w ruby1.8 generalnie są skopane - nie jest to tajemnicą.

Kod: Zaznacz cały

$ ruby -e "p 'ąęć'"
"\304\205\304\231\304\207"
$ ruby -e "puts 'ąęć'"
ąęć
$ ruby -Ku -e "puts 'ąęć'"
ąęć
$ ruby -Ku -e "p 'ąęć'"
"ąę\304\207"
Nie oznacza to jednak, że nie da się w ogóle obsłużyć utfa (w końcu większość aplikacji webowych korzysta z utf i niejedna używa ruby).
Spróbuj z 1.9, ale z wersją najnowszą (1.9.2) bo widzę, że próbowałeś na 1.9.0, która była wersją niestabilną. Jeśli nie ma w paczkach to bardzo łatwo można zainstalować poprzez rvm (http://rvm.beginrescueend.com/).