从Excel文件parsingstring的问题

我有Ruby代码来parsingExcel文件中的数据使用Parseexcelgem。 我需要在该文件中保存2列到哈希,这里是我的代码:

 worksheet.each {| row |
  如果row!= nil
     key = row.at(1).to_s.strip
     value = row.at(0).to_s.strip

    如果!parts.has_key?(key)和key.length> 0
      部分[键] =值
    结束
  结束
 }

但是它仍然将重复键保存到散列“020098-10”中。 我检查了指定行的excel文件,发现区别是“020098-10”和“020098-10”。 第一个有领先的空间,第二个没有。 我不明白是否.stripfunction已经删除所有前导和尾随空白?

当我试图打印出key.length,它给了我这些奇怪的数字:

 020098-10长度18
 020098-10长度17

应该是9 ….

如果你将检查你收到的string,你可能会得到像这样的东西:

" \x000\x002\x000\x000\x009\x008\x00-\x001\x000\x00" 

发生这种情况是因为string编码。 Excel使用unicode,而ruby默认使用ISO-8859-1。 编码在各种平台上会有所不同。

您需要将从Excel中收到的数据转换为可打印的编码。 但是,当你不应该编码在ruby创build的string,因为你会以垃圾结束。

考虑这个代码:

 @enc = Encoding::Converter.new("UTF-16LE", "UTF-8") def convert(cell) if cell.numeric cell.value else @enc.convert(cell.value).strip end end parts = {} worksheet.each do |row| continue unless row key = convert row.at(1) value = convert row.at(0) parts[key] = value unless parts.has_key?(key) or key.empty? end 

您可能需要将编码更改为不同的编码。

较新的Spreadsheet-gem自动为您处理字符集转换,以UTF-8为标准,但您可以更改它,所以我build议您使用它。