在文本文件中强制编码时出错

时间:2016-05-16 15:54:38

标签: ruby character-encoding

我试图做一个小小的挑战,你需要解码一个“外星人消息”'位于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

1 个答案:

答案 0 :(得分:1)

尝试将解压缩的字符串编码为ASCII的问题在于,解压缩的字符串是8位(256个可能的字符), ASCII仅覆盖7位(128个字符)。所以ruby无法知道如何编码(并可能显示)字节值大于127的“字符”,这就是你得到转换错误的原因。

无论如何,基于ASCII表将二进制数转换为字母似乎不是这类任务的最佳方法(除非外星人也使用ASCII表:))。我想你需要处理数据,只有数字。