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()
}
odpovede:
2 pre odpoveď č. 1Takž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í.