Kodowanie utf-8 w Ruby z plikami tekstowymi

Witam

Nie mogę ustawić by ruby korzystał z utf-8 przy kodowaniu plików.

Taki skrypt

# encoding: UTF-8
puts "ą"

Działa bez problemu

Lecz taki

# encoding: UTF-8
File.open("test.txt", "w:UTF-8") do |f|
  f.write "ą"
end

powoduje, że w konsoli wyskakuje

task.rb:4: invalid multibyte char (UTF-8)

pomimo tego, że wszystkie funkcje włączające kodowanie utf-8 są włączone

Używam ruby 2.0.0-p451 z rubyinstallera dla windows.

Kodowanie masz ustawione w pliku dobrze. Obstawiam nieprawidłową obsługę kodowania przez Twój edytor (co zwłaszcza zdarza się przy kopiowaniu tekstu do edytora). Usuń linijkę czwartą i wpisz (ręcznie!) ją jeszcze raz. Jeśli to, nie pomoże spróbuj w innym edytorze.

Zaraz usłyszysz głosy, że powinieneś porzucić Windowsa na rzecz Linuxa. Nie słuchaj się ich przez pierwsze dwa miesiące.

1 Like

W poprzednim poście autora właśnie chciałem napisać, aby przesiadł się na Linucha, no ale jakoś się powstrzymałem - teraz widzę, że słusznie :stuck_out_tongue:

Na zagranicznej stronie znalazłem coś takiego by zastąpić sam znak jego nr w unicode i gdy robię coś takiego

# encoding: UTF-8
File.open('tekst.txt', "w:UTF-8") do |f|
  f.write "\u0105"
end

Rzeczywiście działa i w pliku tekstowym wyświetla się ta litera, lecz przyznam szczerze, jeśli za każdym razem gdy będę chciał napisać jedną z polski liter będę musiał się patrzeć na jej indetyfikator to się chyba pocharatam.

Do pisania używam notepad++ i wolałbym go raczej nie zmieniać z powodu kolorowania składni. Aha no i w kilku tematach ludzi polecali mi już linuxa, ale jakoś nie widzę sensu w instalacji drugiego systemu operacyjnego dla jednego języka programowania, którego porzucę na następnym roku studiów.

Może zainstaluj sobie np. sublimetext

Dokładnie jak przedmówca - polecę Sublime Text. Też dobrze koloruje składnię i jest dość lekki.
Ustawić domyślne kodowanie, nie otwierać i zapisywać pliku w różnych edytorach, bo mogą przestawić kodowanie. Uważać na copy-paste.

W ostateczności zrezygnować z polskich znaków :wink:

Ok wszystko działa, wystarczyło zmienić kodowanie w notepadzie z ansi na utf-8