2

我有这个哈希:

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

4

1 回答 1

4

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

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

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

str.force_encoding("BINARY")

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

于 2012-06-11T13:09:25.093 回答