我试图做一个小小的挑战,你需要解码一个“外星人消息”'位于here
我试图做的是强制编码到ACSII中,试图在此解码消息到目前为止:
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
但是我收到以下错误:
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>'
我不知道这个错误意味着什么,任何人都可以向我解释我做错了什么,以及如何修复编码?
更新
我发现使用以下内容的邮件的字符编码是IMB437:
file = './lib/packed.txt'
gather = File.read(file)
puts gather.encoding
答案 0 :(得分:1)
尝试将解压缩的字符串编码为ASCII的问题在于,解压缩的字符串是8位(256个可能的字符), ASCII仅覆盖7位(128个字符)。所以ruby无法知道如何编码(并可能显示)字节值大于127的“字符”,这就是你得到转换错误的原因。
无论如何,基于ASCII表将二进制数转换为字母似乎不是这类任务的最佳方法(除非外星人也使用ASCII表:))。我想你需要处理数据,只有数字。