我们允许用户通过csv导入数据(使用ruby 1.9.2,因此它是fastercsv).
当然,作为用户数据,它可能没有得到适当的净化.
当我们试图以/index方法显示数据时,有时会出现错误"UTF-8中的无效字节序列",指向erb,在其中显示一个字段小部件.名称
当我们进行导入时,我们希望强制输入的数据有效...有没有ruby操作符可以将字符串映射到有效的utf8字符串,例如
goodstring = badstring.no_more_invalid_bytes
"坏"数据的一个例子是看起来像连字符但不是常规ascii连字符的字符.我们更愿意将非utf-8字符映射到一个合理的ascii等效字符(umlat-u到u表示exmaple),但我们可以简单地将字符剥离到.
因为这是在导入大量数据时,它需要是一个快速的内置操作符,希望...
注:以下是数据示例.该文件来自windows,是8位ascii码.当我们导入它并在erb中显示小部件时.名称判断(而不是widget.name)我们得到:
数据的一个例子是"连字符",实际上是8位代码96.
---当我们将csv解析改为赋值fldval=d.encode('UTF-8')时
Encoding::UndefinedConversionError in StoresController#importfinderitems
"\x96" from ASCII-8BIT to UTF-8
我们正在寻找的是一种简单的方法,可以强制它成为有效的utf8,而不考虑原始类型,即使我们只是go 除非ascii.
虽然没有强制编码那么"好",但这对我们的导入时间有轻微的影响: