/ / Je možné použiť znaky unicode s ruby ​​/ tk? - rubín, okná, unicode, tk

Je možné použiť znaky unicode s rubínom / tk? - rubín, okná, unicode, tk

Používam Ruby 1.9.3 na Windows 7 s rozhraním Tk. V nasledujúcom jednoduchom príklade, ak kliknem na tlačidlo, GUI mi vráti „??????“ namiesto zobrazeného reťazca привет. Je možné získať späť skutočný zadaný reťazec 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()
}

tu zadajte popis obrázku

odpovede:

2 pre odpoveď č. 1

Takže som skontroloval Windows a nechal som to fungovať. Odporúčam vám to umiestniť na začiatok súboru:

#!/usr/bin/env ruby -Ku
require "tk"
# etc.

Na # coding bit nie je potrebný; -Ku flag hovorí Rubymu, aby použil kódovú stránku Unicode. Aj keď sa zdá, že moje testovanie na počítači Mac nemá tento problém (buď sa pripája -Ku alebo pomocou # coding: utf-8 bude fungovať), skutočne sa vyskytuje v systéme Windows. Používam rovnaké verzie ako vy, len v Parallels.

Môžete tiež odstrániť časť shebang a spustiť súbor pomocou ruby -Ku test.rb

Pôvodná odpoveď:
Áno, hoci riešenie, na ktoré som zvyknutý, by používalo utf-8, musíte len dať # coding: utf-8 v hornom riadku súboru a Ruby sa mysticky prepne na spracovanie reťazcov v utf-8:

# coding: utf-8
require "tk"
TkRoot.new.tap { |o|
# etc.

Na ďalšie čítanie by som navrhol tento odkaz ktorá prechádza nad tým, ako si Ruby myslí o kódovaní.