如何在Ruby中获取编码数据的值?

How to get the value of encoded data in Ruby?

提问人:ipegasus 提问时间:1/16/2021 更新时间:1/16/2021 访问量:135

问:

我想知道如何从 Ruby 中的编码数据中获取值。

在下面的示例中,我想存储在变量中的值是 FTUV-38VO-FP。puts 方法正确返回值:

Ruby 控制台

(byebug) row[0]
"\u0000F\u0000T\u0000U\u0000V\u0000-\u00003\u00008\u0000V\u0000O\u0000-\u0000F\u0000P\u0000"
(byebug) row[0].encoding
#<Encoding:ASCII-8BIT>
(byebug) puts row[0]
FTUV-38VO-FP
nil

法典

  def self.import_csv(hd_wix_event_order_csv_upload_id)
    csv_object = HdWixEventOrderCsvUpload.find(hd_wix_event_order_csv_upload_id)
    CSV.parse(open(csv_object.csv_file.url,"r"), { :col_sep => "\t", :headers => :first_row}).each_with_index do |row,index|
      puts "INDEX" + index.to_s
      puts row
      byebug
    end
  end

谢谢

红宝石 UTF-8 ASCII

评论

4赞 Stefan 1/16/2021
您的字符串包含许多不寻常的 null 字符。您可以通过以下方式删除它们,但我猜您的 CSV 不是 UTF-8,而是一些 UTF-16 变体。因此,实际的解决方法是使用正确的编码打开CSV。row[0].delete("\0")
1赞 ipegasus 1/16/2021
谢谢你@Stefan!它在使用时有效:open(csv_object.csv_file.url,“rb:UTF-16LE”)
0赞 tadman 1/16/2021
提示:由于 Ruby 1.8 是古老的历史,因此请使用 Ruby 1.9+ 哈希语法:.此外,您可以在方法调用结束时省略“keyword-arguments”上的 Hash parens,因此这可能是col_sep: "\t", ...{ ... }CSV.parse(open(...), col_sep: "\t", headers: :first_row)
0赞 tadman 1/16/2021
这看起来非常像 UTF-16 而不是 UTF-8。您可以使用该工具吗?如果是这样,它怎么想?由于 NUL 字节不可打印,因此您巧合地不会在输出中看到它们,但它们可能仍然存在。值得一提的是,在 Windows 上,许多(如果不是大多数)程序默认使用 UTF-16。file

答: 暂无答案