Kodowanie (utf-8) w Ruby

zainstalowałem ruby w wersji 1.9.* by móc kodować stringi w UTF, jednak coś mi nie wychodzi, np:

# encoding: utf-8 puts __ENCODING__.name puts str = "Bąk"
wyjście:

UTF-8

i następna linia to krzaczki… (moja konsola wyświetla polskie znaki)

Gdzie jest problem?

[quote=bjera]zainstalowałem ruby w wersji 1.9.* by móc kodować stringi w UTF, jednak coś mi nie wychodzi, np:

# encoding: utf-8 puts __ENCODING__.name puts str = "Bąk"
wyjście:

UTF-8

i następna linia to krzaczki… (moja konsola wyświetla polskie znaki)

Gdzie jest problem?[/quote]
SOA1
Zdefiniuj “wyświetla polskie znaki”. Co to za konsola, jak to odpalasz, jakie masz kodowanie konsoli itd.
Stawiam na to, że konsola nie obsługuje UTFa, w końcu polskie znaki to nie utf.

dobrze prawisz :slight_smile:
strona kodowa domyślna w cmd to nie utf-8…
choć myślałem, że w windows7 bedzie inaczej :stuck_out_tongue:

dzieki za podpowiedz.
pozdr.

Windows i UTF :smiley:

Nie wiem czy to moje jakieś spostrzeżenie ale szerzy się tu ostatnio używanie Rails na Windows. Powinny być jakiś przyklejony wątek zniechęcający do tego. Albo może do forum dodać funkcjonalność wyświetlającą kto z pod jakiego systemu operacyjnego piszę na forum. Sporo by to wyjaśniło.

aj, jednak znowu cos nie tak

oto zawartość pliku:

   Rüby

plik jest stworzony przez program napisany w javie lub c#, 4 pierwsze znaki to integer oznaczający ile znaków ma tekst który następuje po tych 4 znakach. Znaki te są podczas zapisu enkodowane w UTF-8. Między Javą a C# działa to dobrze, zarówno czytanie jak i zapisywanie…

przykladowy kod

# encoding: utf-8 file = File.open("plik.txt","rb:utf-8") puts file.external_encoding.name file.pos = 4 #przesuwam, bo wiem, ze tekst ma 4 znaki text = file.read(4) puts text.encoding.name puts text
wyjscie:

UTF-8 ASCII-8BIT Rübb
no i jak to jest ze otwieram plik binarnie, dekoduje go w UTF-8 i otrzymuje ASCII-8BIT (a w konsekwencji zupełnie innego stringa)?

po pierwsze nie uzywaj Ruby 1.9, po drugie jak uzywasz to przynajmniej sptchuj go.

Jak nie musisz to użyj Ruby w wersji 1.8.7.

co znaczy “sptchuj” go?

pozatym właśnie przeszedłem z 1.8.x na 1.9.x , bo wygooglowalem ze wlasnie w tej wersji wprowadzono coś takiego jak “multilingualization (a.k.a. m17n)” za pomocą którego mogę używać różnych kodowań, w tym UTF-8…

@gotar: odradzasz koledze korzystanie z 1.9 a sam korzystasz (patrz Twoja sygnaturka) - nieładnie :wink:

Ja mam tylko jedną prośbę do @gotara i ewentualnie innych ludzi, którzy też piszą posty w ten sposób. Jeżeli piszesz coś nowicjuszowi, to postaraj się dać jakiekolwiek wytłumaczenie tego, co mu napisałeś. Jeżeli tego nie zrobisz, to takie lakoniczne 3 słowa nic mu nie dadzą. A wtedy to już lepiej nic nie napisać. W ten sposób osoba, której pomagasz, może i rozwiąże problem, ale nie zrozumie na cym dokładnie polegał i dlaczego rozwiązanie jest takie, a nie inne.

ja raczej uwazam ze lepiej naprowadzić na jakiś kierunek by ktos sam mogl do czegos dojsc niz dac odpowiedz, bo poczatkujacym daje to okazje zdobyc wiecej wiedzy, niz zastosowanie gotowego rozwiazania. Ale jesli nalegacie to moge przestac :smiley:

@hosiawak: Ano używan, ale mam pewien problem ciagle by calkowicie przejsc na 1.9, a mianowicie gtk2

Może udało się komuś skompilowac gtk2 by działało z ruby 1.9

http://ruby-gnome2.sourceforge.jp/

Piszę aplikacje pod ruby i gtk2. Wersja 1.8 czesto sie wlecze, 1.9 jesli o moje zastosowania mocno przyspieszylo, ale za nic gtk2 nie moge zmusic do dzialania z nia ;/

Nie chodzi o gotowe rozwiązania. Chodzi o wytłumaczenie dlaczego odradzasz 1.9. Bo później ktoś będzie dalej powtarzał w świat przy każdym błędzie 1.9: nie używajcie tego! 1.8 ftw! :stuck_out_tongue:

ok… :smiley: a wracając do tematu wątku…

http://blog.nuclearsquid.com/writings/ruby-1-9-encodings

to właśnie przez ten artykuł zdecydowałem się na przejście ma 1.9

robię wszystko co tam napisali i tak otrzymuje inne kodowanie :confused:

[quote=bjera]ok… :smiley: a wracając do tematu wątku…

http://blog.nuclearsquid.com/writings/ruby-1-9-encodings

to właśnie przez ten artykuł zdecydowałem się na przejście ma 1.9

robię wszystko co tam napisali i tak otrzymuje inne kodowanie :/[/quote]
No ale jestes pewien że to przypadkiem nie jest problem z konsolą nie wyświetlającą UTF8? Może dla testów zapisz do pliku co tam się wypisuje teraz i sprawdź jakie jest kodowanie w tym pliku?

tak, z konsola jest wszystko ok

[quote=bjera]aj, jednak znowu cos nie tak
file = File.open(“plik.txt”,“rb:utf-8”)
puts file.external_encoding.name
file.pos = 4 #przesuwam, bo wiem, ze tekst ma 4 znaki
text = file.read(4)
puts text.encoding.name
puts text[/quote]
Oj, wiem co jest nie tak.

file.pos = 4

przesuwa o 4 bajty do przodu. 4 bajty to nie 4 znaki w UTF8 :).

[quote=hubertlepicki]Oj, wiem co jest nie tak.

file.pos = 4

przesuwa o 4 bajty do przodu. 4 bajty to nie 4 znaki w UTF8 :).[/quote]
oj nie czytasz tego wątku chyba od początku :stuck_out_tongue:

Mam pytanie odnośnie kodowania w Ruby 1.9 a pisania pluginów do Railsów. Mam taki przykładowy kod :

#encoding: UTF-8 module PlSlug def pl_slug self.tr!("Ą","A") end end
Teraz jets tak, że jeżeli nazwa modułu nie znajdzie się w pierwszej linii, nie mogę go wykorzystać (tu np. próbuję dodać moduł do klasy String). Z drugiej strony, jeśli wyrzucę z pierwszej linii informację o kodowaniu, otrzymam Syntax Error w rubym 1.9. Czy jest na to jakieś rozwiązanie poza pisaniem polskich znaków w systemie szesnastkowym? :wink: