The `raise` concerns me: it means that it'll fall through to the `rescue` clause:

https://github.com/rspec/rspec-expectations/blob/2ca02464bd61dc7398364109d781c9365fb38d10/lib/rspec/expectations/differ.rb#L49-L55

...which may not be what we want.  Plus exceptions are expensive for control flow.

Would it make sense to fall back to `Encoding.default_external` instead? ([more info](http://archive.is/En7f))

That way, it could get down to `matching_encoding`, and if raises the encoding error there, use the `:undef` option to still show some diff.