[ruby] Kodowanie znaków.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
COVERek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 153
Rejestracja: 19 gru 2007, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[ruby] Kodowanie znaków.

Post 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?
Linux User #462372 || Ubuntu User #20118
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [ruby] Kodowanie znaków.

Post autor: Hauleth »

Jeśli chodzi o kodowanie znaków to albo $KCODE = 'u' na początku lub -Ku do linii poleceń
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
COVERek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 153
Rejestracja: 19 gru 2007, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [ruby] Kodowanie znaków.

Post 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"
Linux User #462372 || Ubuntu User #20118
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [ruby] Kodowanie znaków.

Post autor: Hauleth »

A daj ruby -Ku. Mi wtedy bardzo ładnie działa.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
COVERek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 153
Rejestracja: 19 gru 2007, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [ruby] Kodowanie znaków.

Post 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ź"
Linux User #462372 || Ubuntu User #20118
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [ruby] Kodowanie znaków.

Post autor: Hauleth »

Bo ruby 1.9 o ile dobrze pamiętam to z automatu leci po UTF-8
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
rack

Odp: [ruby] Kodowanie znaków.

Post 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
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [ruby] Kodowanie znaków.

Post autor: Hauleth »

Sic. @COVERek mówię ci jasno, że u ma być małe pisz do cholery ruby -Kue 'p "Zażółć gęślą jaźń"'.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
Radarek
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 23 kwie 2006, 18:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Kontakt:

Odp: [ruby] Kodowanie znaków.

Post 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/).
http://radarek.jogger.pl Radarek bloguje - mój blog, zapraszam :-)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości