2010-12-06 8 views
0

Die env sind: Netbeans (v = 6.9.1), Ruby-Debug-Basis (v = 0.10.4), Ruby-debug-id (0.4.16), Rubin (v = 1.8.7)Mit NetBeans, warum Ruby debuggen nicht Multibytes Zeichenfolge richtig anzeigen?

Während des Prozesses ein Ruby-Skript von debug, die debuger multibytes nicht korrekt angezeigt und kann immer zeigt „Binary Data“ für multibytes Zeichenfolge in variabler Fensteransicht:

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

BTW, habe ich versucht, 0.4.16, 0.4.11 für Ruby-Debug-IDE, aber sie haben die gleiche Ausgabe.

Kann mir jemand sagen, wie es gemacht wird, um die Multibyte-Zeichenfolge richtig in der Debug-Variablenfensteransicht anzuzeigen?

Antwort

0

Ein Teil des Problems ist, dass Ruby 1.8.7 den Beginn der Multi-Byte-Unterstützung hatte. Wahrscheinlich müssen Sie Ihren $ KCODE-Wert für Ihre Quelle definieren. Siehe The $KCODE Variable and jcode Library

Ruby 1.9.2 hat viel bessere Unterstützung dafür, also versuchen Sie es, wenn das eine Option ist.


Dies ist aus Herumspielen mit 1.9.2 und 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> 

Und wenn ich folgendes in Textmate laufen, während 1.9.2 als Standard festgelegt ist:

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

die Ausgänge:

# >> 1.9.2 
# >> 调试程序 

Rubin Deb ug19 wird mit dem gleichen Code verrückt, also muss ich schauen, was sein Problem ist.

+0

Vielen Dank Greg. Ich habe versucht, -KU Laufzeitparameter zu setzen, und während des Debug-Vorgangs wird immer Binäre Daten angezeigt. also werde ich beim Debug-Problem Kompromisse eingehen. Wie auch immer, vielen Dank. – ywenbo

+0

Debugger neigen dazu, Binärdaten als Escape-Werte anzuzeigen. Wenn alle Daten in einen bestimmten Unicode-Code-Satz passen, kann davon ausgegangen werden, dass es sich um eine Form von Text handelt. Wenn die Werte jedoch aus vielen Code-Sets stammen, wird sie wahrscheinlich zurückgehen, weil sie nicht weiß, ob der String tatsächlich existiert enthält Text oder wenn es sich um eine Variable handelt, die irgendeine Art von Binärdaten enthält. Einige Debugger ermöglichen das Umsetzen auf einen bestimmten Variablentyp, wie z. B. eine Zeichenfolge oder eine Struktur. So können Sie dem Debugger beibringen, wie Sie Dinge anzeigen möchten, aber ohne Ihre Hilfe würden Sie die Escape- oder Hexadezimalanzeige verwenden. –

+0

Es ist schon eine Ewigkeit her, seit ich es gemacht habe, aber ich denke, der Debugger in NetBeans wird es Ihnen ermöglichen, Werte einzubinden, wenn Sie sie im Java-Debugger zumindest für Java anzeigen. NetBeans und Java sind sehr gut integriert; Ich glaube nicht, dass sie es bisher mit Ruby geschafft haben. –