ruby/tk 是否可以使用 unicode 字符?
我在 Windows 7 上使用 Ruby 1.9.3 和 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()
}
I'm using Ruby 1.9.3 on Windows 7 with Tk interface. In the following simple example, if i click a button, GUI will return me a "??????" string instead of "привет" displayed. Is it possible to get back actual unicode string entered?
#!/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()
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
所以我检查了 Windows 并使其正常工作。我建议您将其放在文件的顶部:
#coding
位是不必要的;-Ku
标志告诉 Ruby 使用 Unicode 代码页。虽然我在 Mac 上的测试似乎没有这个问题(附加-Ku
或使用#coding: utf-8
都可以),但它确实发生在 Windows 中。我正在运行与您相同的版本,只是在 Parallels 中。或者,您可以删除 shebang 部分并使用
ruby -Ku test.rb
运行该文件原始答案:
是的,尽管我习惯的解决方案是使用 UTF-8。您只需将
#coding: utf-8
放在文件的顶行,Ruby 就会神秘地切换到处理 UTF-8 格式的字符串:为了进一步阅读,我建议 此链接,其中介绍了 Ruby 如何看待编码。
So I checked in Windows and got it working. I'd recommend you put this at the top of your file:
The
# coding
bit is unnecessary; the-Ku
flag tells Ruby to use the Unicode codepage. While my testing on Mac doesn't seem to have this issue (either appending-Ku
or using# coding: utf-8
will work), it is indeed occurring in Windows. I'm running the same versions as you, just in Parallels.Alternatively, you could delete the shebang part and run the file with
ruby -Ku test.rb
Original answer:
Yes, although the solution I'm accustomed to would be using UTF-8. You just have to put
# coding: utf-8
on the top line of your file and Ruby will mystically switch over to processing strings in UTF-8:For further reading, I'd suggest this link which goes over how Ruby thinks about encoding.
如果您希望避免
-Ku
'hack',您必须指定 UTF-8 编码,不仅在您自己的 Ruby 源文件中,而且还以某种方式告诉 Tk。 (当然,Ruby 的 Tk 包装器有自己的源文件。)我稍微修改了您的程序(并记录了更改)。现在它可以在 Windows 7 上使用 Ruby 2.2.5(包括 Tk 8.5.12):
在控制台上,我得到的结果是:
If you wish to avoid the
-Ku
'hack', you must specify the UTF-8 encoding, not just in your own Ruby source file, but also by telling Tk about it, in some way. (Ruby's Tk wrapper has its own source files, of course.)I slightly modified your program (and noted the changes). Now it works for me on Windows 7, using Ruby 2.2.5 (including Tk 8.5.12):
On the console, the result I get is: