ruby - 是否可以在 ruby​​/tk 中使用 unicode 字符?

标签 ruby windows unicode tk-toolkit

我在带有 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()
}

enter image description here

最佳答案

所以我检查了 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/

相关文章:

ruby - 将重试的 sidekiq 作业放在队列的开头

ruby - 如何在 Ruby 中复制嵌套类结构

Windows 10 忽略我的设置文件中的 Authenticode

ruby - 如何摆脱 ruby 中的非ascii字符

python - 在Python中插入TreeView时如何修复UnicodeDecodeError?

ruby - 重新打开 IO Stream 与仅使用新的 Stream

ruby - 如何为代码完成创建 RubyMine 索引非内置 gem?

java - 是否可以在 C :/Windows/System32/location at runtime? 中放置一个 myfile.file

python - 从 python 启动 vs2008 构建

javascript - javascript中的unicode字符