Troszkę poszperałem w sieci, troszkę pokombinowałem i powstał taki kod:
require 'iconv' class String def to_ascii ascii = "acelnoszzACELNOSZZ" cep = "\271\346\352\263\361\363\234\277\237\245\306\312\243\321\323\214\257\217" s = Iconv.new("cp1250", "UTF-8").iconv(self) s.tr!(cep, ascii) return (s.length==0) ? self : s end endLubię Ruby za to całkowicie bezkonfliktowe i niezwykle proste wzbogacanie standardowych klas.
Na pierwszy rzut oka pada pytanie: po co sprawdzać długość łańcucha s? Więc to zagadka. Dla wszystkich, którzy zgadną i nadeślą rozwiązanie - nagroda :-)
Jeśli potrzebujesz takiego rozwiązania to wrzuć powyższy listing do pliku na przykład o nazwie str_utl.rb i umieść w Railsach w katalogu lib, a do pliku environment.rb wstaw require 'str_utl'. U mnie działa to tak:
>> "Łabędź i żółw".to_ascii >> "Labedz i zolw"
bardziej od sprawdzania długości zastanawia mnie czemu na końcu jest tylko jeden end ;)
OdpowiedzUsuńRacja!
OdpowiedzUsuńJuż poprawione.
Po dodaniu tych plików trzeba zapewne jakoś powiedzieć Railsowi, że ma takie coś zaktualizować? Jak?
OdpowiedzUsuńTak jak pisałem:
OdpowiedzUsuńwrzuć powyższy listing do pliku na przykład o nazwie str_utl.rb i umieść w Railsach w katalogu lib, a do pliku environment.rb wstaw require 'str_utl'
chyba zapomniałeś o literce 'ż' :)
OdpowiedzUsuń