QA@IT
«回答へ戻る

回答を投稿

String#encode メソッドは dst_encoding と src_encoding に同じエンコードを指定した場合、変換処理を行いません。replace 処理もされません。
しかし、なぜか例外が発生しなくなるという挙動になるのですが、それはバグ https://bugs.ruby-lang.org/issues/6190 なので、その挙動を利用するのは避けておいたほうが良いと思います。

なので、正しくは

str.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")

のようになると思います。ブログも書いたのでよければそちらも参照してください => リンク

String#encode メソッドは dst_encoding と src_encoding に同じエンコードを指定した場合、変換処理を行いません。replace 処理もされません。
しかし、なぜか例外が発生しなくなるという挙動になるのですが、それはバグ https://bugs.ruby-lang.org/issues/6190 なので、その挙動を利用するのは避けておいたほうが良いと思います。

なので、正しくは

```ruby
str.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")
```

のようになると思います。ブログも書いたのでよければそちらも参照してください => [リンク](http://blog.livedoor.jp/sonots/archives/23652294.html)