Wczytywanie - gets

Witam! Mam taki problem, jak wczytuje metodą “gets” jakąś linie z polskimi znakami, to wyrzuca mi później błąd, gdy chce użyć na tej linii (stringu) jakiejś metody np. size, length itp. Natomiast, jak przypiszę do zmiennej np. napis = “ąćżź” to wszystko jest OK (mogę na niej wykorzystywać wszystkie metody). Proszę o pomoc w rozwiązaniu problemu. Poniżej daje przykładowy kod:

encoding: UTF-8

napis = “ążźć”
puts “jest dobrze #{napis.length}”
nowy = gets
puts nowy.length # i tutaj wywal mi błąd

KOMUNIKAT błędu: in ’ ’ undefined method ‘length’ for nil:NilClass ( NoMethodError )

PS: Używam Ruby 1.9

SOA#1, Ruby 1.9.1-p376.

Już wiem w czym jest problem. Chodzi o konsolę windowsową cmd, jeśli ustawie kodowanie chcp 65001 wtedy przy wczytaniu gets’em i wywołaniu jakiejś metody na tym stringu wywala in ’ ’ undefined method ‘length’ for nil:NilClass ( NoMethodError ). Jeśli natomiast nie zmienię kodowania, tylko pozostawię domyślne to wszystko jest OK. Niestety wtedy przy wypisywaniu polskich nazw z pliku na konsolę będą krzaczki :frowning: .

pozostaje więc zmienić system operacyjny;)

Niestety nie mam czasu, aby rozkminiać linuxa.

Jaka to wersja rubiego?

Znajdź czas.

Zmniejszy się Twoja produktywność: drastycznie w pierwszych dwóch tygodniach, mocno w pierwszych dwóch miesiącach. Później będziesz bardziej produktywny na Linuksie niż kiedykolwiek mogłeś być na Windows.

Czym są dwa miesiące wobec całego życia z systemem, który Ci pomaga a nie rzuca kłody pod nogi?

Ewentualnie z mniej inwazyjnych rozwiązań (chociaż też bym polecał zmianę systemu) - zmień cmd na powershella (tam jest sensowniejsza obsługa kodowań ztcp).

qoobaa, używasz już 1.9.1 na produkcji?

Wersja Rubiego chyba nie ma tutaj znaczenia - pod Windowsem nie da się używać polskich znaków w konsoli, nie będą także one poprawnie wyświetlane.

Napiszę Tobie to, co wiele razy powtarzano na tym forum - jeśli chcesz na poważnie zająć się pisaniem w Ruby, to zmień system (ewentualnie pozostaje Ci wirtualizacja). Od tygodnia siedzę na Ubuntu i pisanie w Ruby na tym systemie jest o niebo przyjemniejsze.

Wersja Rubiego chyba nie ma tutaj znaczenia - pod Windowsem nie da się używać polskich znaków w konsoli, nie będą także one poprawnie wyświetlane.[/quote]
Dlaczego tak sądzisz?

C:\tmp>ruby x.rb jest dobrze 4 ąęć 4
U mnie działa ;).

Jaka to wersja Windowsa? :wink:

Generalnie pod XP pod standardową konsolą polskie litery wyświetlały się tylko po wklepaniu chcp 65001, co przy okazji powodowało inne niedogodności (jak na przykład ten opisany w trzecim poście).

Planowaliśmy go użyć, ale w tym momencie nie jestem pewien, czy obecny projekt kiedykolwiek “stanie na produkcji”.

[quote=rav]Jaka to wersja Windowsa? :wink:

Generalnie pod XP pod standardową konsolą polskie litery wyświetlały się tylko po wklepaniu chcp 65001, co przy okazji powodowało inne niedogodności (jak na przykład ten opisany w trzecim poście).[/quote]
Jakiś windows xp. Polskie znaki w takiej formie jak wyżej powinny działać zawsze. Skrypt rubiego nie ma tu nic do gadania, wczytuje podane bahty i w takiej samej postaci je wypisuje, nie mając pojęcia co siedzi w środku.