ウェブからソースを取得します。素材のエンコーディングが100%UTF8バイトシーケンスでない場合があります。私はiconvを使って、これらのシーケンスを静かに無視してきれいな文字列を取得します。廃止されたiconvをString#にエンコードして無効なUTF8修正をエンコードする方法
@iconv = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid_string = @iconv.iconv(untrusted_string)
しかしiconvは廃止されましたが、廃止予定の警告が多いようです。 iconvのは、将来的に廃止される予定
、文字列#エンコードに
を使用し、私はString#encode
年代に:invalid
と:replace
オプションを使用して、それを変換しようとしたが、それが動作していないようです(つまり、間違ったバイト列削除されていない)。このためにString#encodeを使用する正しい方法は何ですか?
私はあなたが試みていることは非常に危険だと思います。テキストエンコーディングは妊娠と似ています。あなたはUTF8を持っているか、そうではありません。あなたはUTF8の "ビット"を持つことはできません。エラーがある場合、中止する必要があります。そうしないと、悪意を持って準備された文字列による攻撃の影響を受けます。 –
私はクローラを書いていますが、そこには無効なページがあります。だからバイトをきれいにするだけで済む。 – lulalala