Используя Netbeans, почему отладка Ruby не отображает многобайтовую строку должным образом? - PullRequest
0 голосов
/ 06 декабря 2010

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 отладчик не может правильно отображать мультибайты и всегда отображает «Двоичные данные» для многобайтовой строки в представлении переменного окна:

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

Кстати, я пробовал 0.4.16, 0.4.11 для ruby-debug-ide, но они имеют одинаковый вывод.

Может кто-нибудь сказать мне, как заставить его правильно отображать многобайтовую строку в представлении окна отладочной переменной?

1 Ответ

0 голосов
/ 06 декабря 2010

Частично проблема в том, что в Ruby 1.8.7 появилась поддержка нескольких байтов. Возможно, вам нужно определить значение $ KCODE для вашего источника. См. Переменная $ KCODE и библиотека jcode

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 злится на тот же код, поэтому мне нужно разобраться в чем его проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...