为什么\ xF3不被识别为UTF-8

时间:2012-06-11 11:54:08

标签: ruby mongodb mongoid padrino

我有这个哈希:

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

1 个答案:

答案 0 :(得分:4)

十六进制0xF3本身是有效的UTF-8。大于0x7F的值都是多字节字符。是什么让你认为它应该是UTF-8?

您可以在此处阅读允许的序列:http://en.wikipedia.org/wiki/UTF-8#Description

如果你需要强制ruby字符串采用允许任意字节序列的编码,你可以强制它为二进制:

str.force_encoding("BINARY")

使用二进制编码,#gsub和依赖有效编码的其他字符串操作将逐字节地工作,而不是逐个字符。