私は普通のform_for
でアップロードされたファイルを持っています。これはActionDispatch::Http::UploadedFile
オブジェクトをparamsハッシュに入れています。このオブジェクトには.read
という名前でコンテンツを取得できます。私は今、ファイルをXML文書に埋め込む必要があります。私は現在、XMLを構築するために通常のRuby文字列を使用しています。 Rails文字列のデフォルトのエンコーディングはutf-8です。アップロードされたバイナリファイル(ASCII-8BIT)をXML(UTF-8)に埋め込むにはどうすればよいですか?
したがって、エラーEncoding::UndefinedConversionError
,"\x89" from ASCII-8BIT to UTF-8
が表示されます。
これは、次のファイルのために起こる:
what-matters-now-1.pdf: application/octet-stream; charset=binary example.csv: text/plain; charset=utf-8 investigations.png: image/png; charset=binary
それがために発生しません:私は、エンコーディングを変更しようとしているが、私は同じエラーを取得
my_test.txt: text/plain; charset=us-ascii
:
params[:file].read.encode('utf-8')
私のロジックはこれが答えでなければならないと私はそれがASCIIを間違って推測していたと感じていましたので、Rubyのエンコーディング推測を試してみました。 MACINTOSHだった。しかし、エンコーディングを強制してutf-8にエンコードすると、まだエラーが出ます。 – Kris
申し訳ありませんが、これは誤っています。ファイルはpdfなので、変換が全くないはずです。そのファイルはバイナリファイルとして扱われるべきです - 残念ながら、私はそれを行う方法を知らないのです。 – gorn
バイナリファイルを何らかの形で最初にエンコードすることなく、XMLドキュメントに埋め込むことはできません。バイナリファイルをバイトとして操作しているときは、バイトストリームは文字列ではないため、文字列操作の処理はまったく使用できません。 –