2010-12-06 4 views
0

env:netbeans(v = 6.9.1)、ruby-debug-base(v = 0.10.4)、ruby-debug-ide(0.4.16)、ruby(v = 1.8.7)Netbeansを使用すると、Rubyデバッグでマルチバイト文字列が正しく表示されないのはなぜですか?

Rubyスクリプトをデバッグのプロセスの間に

、debugerが正しくマルチバイトを表示することができず、常に変数ウィンドウビューでマルチバイト文字列は、「バイナリデータ」を表示します。

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

ところで、私は0.4.16、0.4.11を試してみましたruby-debug-ideの場合、同じ出力があります。

デバッグ変数のウィンドウビューにマルチバイト文字列を正しく表示する方法を教えてもらえますか?

答えて

0

問題の一部は、Ruby 1.8.7がマルチバイトサポートの開始点を持っていたことです。おそらくあなたのソースの$ KCODE値を定義する必要があります。 The $KCODE Variable and jcode Library

Ruby 1.9.2の方がはるかにサポートされているので、試してみてください。

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は私のデフォルトとして設定されている間:


これは1.9.2とIRBいじりからである

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

出力する:

# >> 1.9.2 
# >> 调试程序 

ルビーデブ私はその問題が何であるかを調べる必要があるので、ug19は同じコードで怒って取得します。

+0

Gregさんに非常に感謝します。私はこれまでKUの実行時間パラメータを設定しようとしましたが、デバッグの過程で常にバイナリデータが表示されます。私はデバッグの問題について妥協するつもりです。とにかくありがとう。 – ywenbo

+0

デバッガはバイナリデータをエスケープされた値として表示する傾向があります。すべてのデータが特定のUnicodeコードセットに収まる場合、それは何らかの形式のテキストであると仮定することができますが、値が多くのコードセットからのものであれば、実際に文字列が実際にはテキストが含まれている場合や、何らかのバイナリデータを含む変数の場合デバッガの中には、文字列や構造体のような特定の型の変数にキャストすることができるものがあります。そのため、デバッガにどのように表示するかを教えることができますが、エスケープや16進表示を使用することはできません。 –

+0

私はそれをして以来ずっと古くなってきましたが、NetBeansのデバッガはJavaデバッガでJava用に値を表示するときに値を強制することになります。 NetBeansとJavaは非常によく統合されています。私は彼らがまだRubyで同じことをしてきたとは思わない。 –