使用Netbeans,为什么Ruby调试不能正确显示多字节字符串?

时间:2010-12-06 00:05:33

标签: ruby debugging netbeans

env是:netbeans(v = 6.9.1),ruby-debug-base(v = 0.10.4),ruby-debug-ide(0.4.16),ruby(v = 1.8.7)

在对Ruby脚本进行调试的过程中,debuger无法正确显示多字节,并且在变量窗口视图中始终显示多字节字符串的“二进制数据”:

require 'rubygems'
require 'active_support'
str = "调试程序"
str = str.mb_chars
puts "length: #{str.length}"

顺便说一句,我尝试了0.4.16,0.4.11 for ruby​​-debug-ide,但它们的输出相同。

有人可以告诉我如何在调试变量窗口视图中正确显示多字节字符串吗?

1 个答案:

答案 0 :(得分:0)

部分问题是Ruby 1.8.7开始支持多字节。您可能需要为源定义$ KCODE值。见The $KCODE Variable and jcode Library

Ruby 1.9.2对它有更好的支持,所以如果这是一个选项,试试吧。


这是来自于1.9.2和irb:

Greg:~ greg$ irb -f
irb(main):001:0> RUBY_VERSION
=> "1.9.2"
irb(main):002:0> str = "调试程序"
=> "调试程序"
irb(main):003:0> str
=> "调试程序"
irb(main):004:0> str.each_char.to_a
=> ["调", "试", "程", "序"]
irb(main):005:0> str.each_byte.to_a
=> [232, 176, 131, 232, 175, 149, 231, 168, 139, 229, 186, 143]
irb(main):006:0> str.valid_encoding?
=> true
irb(main):007:0> str.codepoints
=> #<Enumerator: "调试程序":codepoints>
irb(main):008:0> str.each_codepoint.to_a
=> [35843, 35797, 31243, 24207]
irb(main):009:0> str.each_codepoint.to_a.map { |i| i.to_s(16) }
=> ["8c03", "8bd5", "7a0b", "5e8f"]
irb(main):010:0> str.encoding
=> #<Encoding:UTF-8>
irb(main):011:0>

并且,如果我在Textmate中运行以下内容,而1.9.2被设置为我的默认值:

# encoding: UTF-8
puts RUBY_VERSION
str = "调试程序"
puts str

输出:

# >> 1.9.2
# >> 调试程序

Ruby Debug19对相同的代码感到生气,因此我需要研究它的问题所在。