Kodowanie stron w HTTP.get_response

Witam,
Pobieram stronę w iso8859-2 klasą Net::HTTP.get_response(URI.parse(url)) i niestety polskie znaki się sypią. Dałbym radę nawet bez polskich znaków, ale .gsub(/[^[:alnum:]]/, ‘’) nie działa tak jak należy (dla niektórych ogonków usuwa polski znak i następujący po nim). Co należy zrobić aby strona była interpretowana poprawnie?

Pozdrawiam,
S.

Co to znaczy że znaki się sypią? Powinieneś dostać w odpowiedzi dokładnie taki tekst jaki jest pod wskazanym adresem i jeśli się nie mylę kodowanie nie ma tutaj większego znaczenia dla rubiego (po prostu ciąg bajtów).

Wejdź na stronę: http://rozklady.mpk.krakow.pl/aktualne/0004/0004t059.htm i ustaw w przeglądarce kodowanie utf-8. Właśnie coś takiego widzi rails, a ja nie jestem w stanie tego normalnie przetwarzać. Np.: “Elektromonta�” != “Elektromontaż”

Jeśli dane w bazie trzymasz w utf-8 (a powinieneś) to musisz to co pobierasz z tamtej strony zamienić z iso-8859-2 na utf-8.

Możesz do tego użyć Iconv, np.

[code=ruby]require ‘iconv’

utf_text = Iconv.iconv(‘utf-8’, ‘iso-8859-2’, content)[/code]

Jeszcze jedno, [[:alnum]] nie wyłapie polskich znaków, musisz być “explicit about it” :slight_smile:

Wielkie dzięki .

Ps. zwróć uwagę na zaprzeczenie w gsub :wink:

a :alnum: nie działa też na znaki z krzaczkami przy włączonym utf-8 i oniguramie? ;]

Zwróciłem uwagę na zaprzeczenie, co nie zmienia faktu że :alnum: nie wyłapie ogonków :slight_smile:

$KCODE = ‘u’ nie pomoże a oniguruma na 1.8.6 obecnie się wywala podczas kompilacji (przynajmniej u mnie).

Myślałem, że onigurama już od 1.8.6 jest. :slight_smile:

:alnum: nie, ale jego zaprzeczenie już tak :slight_smile: To jest taki mój prymitywny workaround, który ma usunąć wszystkie znaki oprócz liter alfabetu łacińskiego.

Mam jeszcze jedno pytanko związane z ogonkami: jak sprawić, aby w ruby’m, dla polskich wyrażeń, działały prawidłowo metody sort i capitalize?

W railsach możesz się wspomóc multibyte:

"żółty".mb_chars.capitalize.to_s #=> "Żółty" "żółty".mb_chars.reverse.to_s #=> "ytłóż"
i tak dalej ;]

Dopiszę tu jeden problem, który mnie ostatnio nawiedził, otóż korzystając z slugalizera zauważyłem, że gubi nasz “ł”, a dokładniej railsowe multibyte, spotkał się ktoś z rozwiązaniem tego problemu?

[code=ruby]Loading development environment (Rails 2.1.0)

a = ‘ł’
=> “ł”

a.chars.capitalize
=> #<ActiveSupport::Multibyte::Chars:0x2aaab4c6f2d0 @string=“Ł”>

a = ‘Ł’
=> “Ł”

a.chars.downcase
=> #<ActiveSupport::Multibyte::Chars:0x2aaab4c6aa00 @string=“ł”>[/code]
Railsowe chars jest OK, to raczej slugalizer coś gubi.

A jak to widzisz z rails2.2, próbuję tu zrobić coś z seo-urlami, mieszam metody, wykorzystuje wtyczki i ciągle “ł” jest gubione, pod platformą unixową i windowsem, nie wiem gdzie już szukac.