我们允许用户通过 csv 导入数据(使用 ruby 1.9.2,因此它是 fastercsv)。
当然,作为用户数据,它可能没有被正确地消毒。
当我们尝试在/index 方法中显示数据时,有时会得到错误“无效的 UTF-8字节序列”,指向我们的 erb,在那里我们显示一个字段 widget.name
当我们进行导入时,我们想要强制输入的数据是有效的... 是否有一个 Ruby 操作符将一个字符串映射到一个有效的 utf8字符串,例如
goodstring = badstring.no_more_invalid_bytes
“坏”数据的一个例子是 char,它看起来像一个连字符,但不是一个常规的 ascii 连字符。我们更愿意将非 utf-8字符映射到一个合理的 ascii 等价物(比如 umlat-u 映射到 u) ,但是我们可以简单地将字符剥离为。
因为这是当导入大量数据时,它需要一个快速的内置操作符,希望..。
注意: 下面是一个数据示例。这个文件来自 windows,是8位 ascii。当我们导入它时,在 erb 中我们显示 widget.name.sight (而不是 widget.name) ,我们得到: “锁链 x96配件”
数据的一个例子是“连字符”实际上是8位代码96。
——-当我们将 csv 解析器改为分配 fldval = d.encode (‘ UTF-8’)时 它抛出了这个错误:
Encoding::UndefinedConversionError in StoresController#importfinderitems
"\x96" from ASCII-8BIT to UTF-8
我们要找的是一种简单的方法,强制它是有效的 utf8不管原点类型是什么,即使我们只是去掉 non-ascii。
虽然不像强制编码那么“好”,但这样做会稍微减少导入时间: (/P { ASCII }/,”) 谢谢你,穆拉登!