UTF-8 文字列中に UTF-8 として正しくないコードが入っていた場合に、その文字を「?」などに置き換えたいことがあります。
たとえば MySQL に登録するときは不正な文字を消しとかないと、その文字以降すべて消えてしまいます。
mysql> insert into t (c) values (0x414243FF58595A); Query OK, 1 row affected, 1 warning (0.06 sec) Warning (Code 1366): Incorrect string value: '\xFFXYZ' for column 'c' at row 1 mysql> select * from t; +------+ | c | +------+ | ABC | +------+ 1 row in set (0.00 sec)
ということで、Ruby では Iconv を使ってこんな感じで対処してます。
require 'iconv'
def sanitize_utf8(str)
ret = ''
i = Iconv.open(' …[さらに読む]