使用Netbeans,为什么Ruby调试不能正确显示多字节字符串?
环境包括:netbeans(v=6.9.1)、ruby调试库(v=0.10.4)、ruby调试ide(0.4.16)、ruby(v=1.8.7) 在调试Ruby脚本的过程中,调试器无法正确显示多字节,并且始终在变量窗口视图中显示多字节字符串的“二进制数据”:使用Netbeans,为什么Ruby调试不能正确显示多字节字符串?,ruby,debugging,netbeans,Ruby,Debugging,Netbeans,环境包括:netbeans(v=6.9.1)、ruby调试库(v=0.10.4)、ruby调试ide(0.4.16)、ruby(v=1.8.7) 在调试Ruby脚本的过程中,调试器无法正确显示多字节,并且始终在变量窗口视图中显示多字节字符串的“二进制数据”: require 'rubygems' require 'active_support' str = "调试程序" str = str.mb_chars puts "length: #{str.length}" 顺便说一句,我在ruby调试
require 'rubygems'
require 'active_support'
str = "调试程序"
str = str.mb_chars
puts "length: #{str.length}"
顺便说一句,我在ruby调试ide中尝试了0.4.16和0.4.11,但它们的输出相同
有人能告诉我如何在调试变量窗口视图中正确显示多字节字符串吗?部分问题在于Ruby 1.8.7开始支持多字节。您可能需要为源代码定义$KCODE值。看 Ruby1.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>
哪些产出:
# >> 1.9.2
# >> 调试程序
Ruby Debug19对同样的代码很生气,所以我需要研究它的问题所在。非常感谢Greg。我曾经尝试设置-KU运行时参数,在调试过程中它总是显示二进制数据。所以我会在调试问题上妥协。无论如何,非常感谢。调试器倾向于将二进制数据显示为转义值。如果所有数据都符合特定的Unicode代码集,则可以假定它是某种形式的文本,但如果值来自多个代码集,则可能会恢复为转义,因为它不知道字符串是否实际包含文本,或者它是否是包含某种二进制数据的变量。有些调试器允许强制转换到特定类型的变量,如字符串或结构,因此您可以告诉调试器如何查看内容,但如果没有您的帮助,它将使用转义或十六进制显示。我这么做已经很久了,但我认为NetBeans中的调试器将允许您在Java调试器中显示值时强制这些值,至少对于Java是这样。NetBeans和Java集成得非常好;我认为他们还没有在Ruby上做到这一点。
# >> 1.9.2
# >> 调试程序