Я використовую Ruby 1.9.3 на Windows 7 з інтерфейсом Tk. У наступному простому прикладі, якщо натиснути кнопку, GUI поверне мені "??????" відображається рядок замість "привет". Чи можна повернути фактичну введену рядок unicode?
#!/usr/bin/env ruby
# coding:utf-8 vi:et:ts=2
require "tk"
TkRoot.new.tap { |o|
$edit = TkEntry.new( o ).tap { |o|
o.pack( :side => "left" )
o.insert( 0, "привет" )
}
TkButton.new( o, :text => "click me" ).tap { |o|
o.pack( :side => "left" )
o.bind( "1" ) {
## In this place i want unicode, but got garbage :(
puts( $edit.get().encoding.name )
puts( $edit.get().inspect )
}
}
o.mainloop()
}
Відповіді:
2 для відповіді № 1Так що я перевірив у Windows і отримав його роботу. Рекомендую поставити це у верхній частині файлу:
#!/usr/bin/env ruby -Ku
require "tk"
# etc.
The # coding
біт непотрібний; -Ku
Прапор повідомляє Ruby про використання кодової сторінки Unicode. Хоча моє тестування на Mac не здається, ця проблема (або додавання -Ku
або використовуючи # coding: utf-8
буде працювати), це дійсно відбувається в Windows. Я виконую ті ж версії, що й ви, саме в Parallels.
Крім того, ви можете видалити частину shebang і запустити файл за допомогою ruby -Ku test.rb
Оригінальна відповідь:
Так, хоча рішення, з яким я звик, буде використовувати utf-8 # coding: utf-8
у верхньому рядку вашого файлу, а Ruby містично перейде на обробку рядків у utf-8:
# coding: utf-8
require "tk"
TkRoot.new.tap { |o|
# etc.
Для подальшого читання, я пропоную це посилання який переходить до того, як Ruby думає про кодування.