Encoding of result string for String#gsub! is not consistent for BINARY
When String#sub! is called on a string in BINARY encoding the encoding may be changed to the replacement encoding.
This is due to rb_enc_compatible()
If this is a feature the documentation should be updated to indicate this.
Attached is a test patch.