2016-05-16 4 views
0

Ich versuche, eine kleine Herausforderung zu tun, in dem Sie eine ‚Alien Message‘ befindet sich zu dekodieren haben hereFehler beim Zwingen Codierung in Textdatei

Was ich versuche zu zwingen zu tun, ist die Codierung in ACSII in ein versuchen, die Nachricht zu entschlüsseln ist hier, was ich bisher:

def gather_info 
    file = './lib/SETI_message.txt' 
    gather = File.read(file) 
    packed = [gather].pack('b*') 
    encoding_forced = packed.encode(Encoding::ASCII) 
    File.open('packed.txt', 'a+'){ |s| s.puts(encoding_forced) } 
end 

Doch ich die folgende Fehlermeldung erhalten:

main.rb:5:in `encode': "\xFF" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII (Encoding::UndefinedConversionError) 
     from main.rb:5:in `gather_info' 
     from main.rb:9:in `<main>' 

ich habe keine Ahnung, was diese Fehler Mittel jemand erklärt mir, was ich falsch mache, und wie man die Kodierung repariert?

UPDATE:

ich entdeckt habe, dass die Zeichencodierung ist IMB437 für die Nachricht mit dem folgenden:

file = './lib/packed.txt' 
    gather = File.read(file) 
    puts gather.encoding 

Antwort

1

Das Problem mit dem Versuch, die entpackte Zeichenfolge ASCII zu codieren ist, dass während der entpackte String ist 8 Bit (256 mögliche Zeichen), ASCII umfasst nur 7 Bits (128 Zeichen). Also gibt es keine Möglichkeit, wie Ruby wissen kann, wie man "Zeichen" mit einem Byte-Wert über 127 codiert (und möglicherweise anzeigt), und deshalb erhalten Sie den Konvertierungsfehler.

Wie auch immer, die Umwandlung der Binärzahlen in Buchstaben basierend auf der ASCII-Tabelle scheint nicht der beste Ansatz für diese Art von Aufgabe (außer die Außerirdischen verwendet auch die ASCII-Tabelle :)). Ich denke, Sie müssen mit den Daten nur mit Zahlen arbeiten.

+0

'wenn die Außerirdischen nicht auch die ASCII-Tabelle verwenden:)' Haha, das ist großartig, also Ruby hilft mir im Grunde nicht, ist das, was du mir erzählst? – 13aal

+0

Nein, nein, ich wollte nur sagen, dass es wahrscheinlich keinen Sinn hat, die Bitfolge in Buchstaben zu konvertieren, da immer eine Codierung involviert ist. Ich vermute, dass die Aufgabe stattdessen darin besteht, das "Alien-ABC" zu verstehen, das irgendwie in der Nachricht enthalten sein muss ... und dass das ABC wahrscheinlich nur Zahlen, nicht Buchstaben umfassen wird. Es scheint mir, dass die Nachricht in eine Reihe von "Zeilen" aufgeteilt werden kann, nur weil man sie betrachtet und sieht, dass es anscheinend alle paar hundert Bit Wiederholungen gibt ... Aber ich rate nur ... – BoraMa

+0

Nun Ich habe vor einer Stunde herausgefunden, dass das Umwandeln in UTF-8 nichts anderes bewirkt, als ein zwinkerndes Gesicht zu werfen, so wie die Datei mich verspottet. Das ist irritierend lol, danke für deine Hilfe – 13aal