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

16進数の0xF3自体は有効なUTF-8ではありません。0x7Fより大きい値は、すべてマルチバイト文字です。何がUTF-8であるべきだと思いますか?

ここで許容されるシーケンスを読むことができます:http://en.wikipedia.org/wiki/UTF-8#Description

ルビー文字列に任意のバイトシーケンスを許可するエンコーディングを想定させる必要がある場合は、強制的にバイナリにすることができます。

str.force_encoding("BINARY")

バイナリエンコーディング、#gsubおよび有効なエンコーディングに依存する他の文字列操作では、文字ごとではなく、バイトごとに機能します。

于 2012-06-11T13:09:25.093 に答える