Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Netbeans,为什么Ruby调试不能正确显示多字节字符串?_Ruby_Debugging_Netbeans - Fatal编程技术网

使用Netbeans,为什么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调试

环境包括: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调试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
# >> 调试程序