Tvdbのハンニバルエピソードには、奇妙なキャラクターが含まれています。
例えば:
Œuf
Ruby吐き出す:
./manifesto.rb:19:in `encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
from ./manifesto.rb:19:in `to_json'
from ./manifesto.rb:19:in `<main>'
行19は次のとおりです。
puts @tree.to_json
これらの非UTF文字に対処する方法はありますか?私はむしろそれらを置き換えるのではなく、変換しますか?それとも無視しますか?わかりません、どんな助けもありがたいです。
奇妙な部分は、スクリプトがcronを介して正常に動作することです。手動で実行するとエラーが発生します。
オブジェクトには別のエンコーディングを使用する必要があるようです。たとえば、@tree.force_encoding('ISO-8859-1')
を使用して ascii-8bit ではなく iso-8859-1 を使用して、変数@tree
に適切なコードページを設定する必要があります。 。 ASCII-8BIT
はバイナリファイルにのみ使用されるためです。
Rubyの現在の外部エンコーディングを見つけるには、次を発行します。
Encoding.default_external
Sudo で問題が解決する場合、問題はデフォルトのコードページ(エンコード)にあったため、解決するには、次のいずれかの方法で適切なデフォルトのコードページ(エンコード)を設定する必要があります。
File.open(yml_file、 'w')はFile.open(yml_file、 'w b')に変更する必要があります
私は、同様の問題を修正しようとして、何時間も苦しみました。ロケール、データベースエンコード、考えられるすべてをチェックしましたが、データベースからASCII-8BITエンコードデータを取得していました。
バイナリフィールドにテキストを格納すると、ASCII-8BITでエンコードされたテキストとして自動的に返されますが、これは理にかなっていますが、これは(明らかに)アプリケーションで問題を引き起こす可能性があります。
移行時に列エンコードを:text
に戻すことで修正できます。