我在带有 Tk 接口(interface)的 Windows 7 上使用 Ruby 1.9.3。在下面的简单示例中,如果我单击一个按钮,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()
}
最佳答案
所以我检查了 Windows 并使其正常运行。我建议您将其放在文件的顶部:
#!/usr/bin/env ruby -Ku
require 'tk'
# etc.
#编码
位是不必要的; -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.
要进一步阅读,我建议 this link其中讨论了 Ruby 如何看待编码。
关于ruby - 是否可以在 ruby/tk 中使用 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9112643/