我有这个哈希:
a={"topic_id"=>60693, "urlkey"=>"innovacion", "name"=>"Innovaci\xF3n"}
我正在尝试使用Mongoid将其保存到MongoDB,当我收到此错误时:
BSON::InvalidStringEncoding: String not valid UTF-8
然后我尝试gsub
:
a["name"].gsub(/\xF3/,"o")
我得到:SyntaxError: (pry):12: too short escaped multibyte character: /\xF3/
我在模型文件的开头添加了一个魔术评论:# encoding: UTF-8
答案 0 :(得分:4)
十六进制0xF3本身是不有效的UTF-8。大于0x7F的值都是多字节字符。是什么让你认为它应该是UTF-8?
您可以在此处阅读允许的序列:http://en.wikipedia.org/wiki/UTF-8#Description
如果你需要强制ruby字符串采用允许任意字节序列的编码,你可以强制它为二进制:
str.force_encoding("BINARY")
使用二进制编码,#gsub
和依赖有效编码的其他字符串操作将逐字节地工作,而不是逐个字符。