2016-10-20 7 views
0

によって返されたボディを読み取ることができません私はこれを持っている:HTTPoison

HTTPoison.start 
case HTTPoison.get("some url") do 
    {:ok, %HTTPoison.Response{status_code: 200, body: body}} -> 
    IO.puts(body) 

例外を生成する:

Generated escript grex_cli with MIX_ENV=dev 
** (ArgumentError) argument error 
    (stdlib) :io.put_chars(#PID<0.49.0>, :unicode, [<<60, 33, 100, 111,..... 58, ...>>, 10]) 
    (elixir) lib/kernel/cli.ex:76: anonymous fn/3 in Kernel.CLI.exec_fun/2 

私は身体を読んで、それを印刷することができますどのように?

+3

が無効UTF-8のように見えます。 'IO.inspect(body)'を試してみてください。そのURLはバイナリファイルを返しますか? @Dogbert、text。 – Dogbert

+0

今度は '<< 60、33、100、111、99 .....'を返します。それをどのようにしてテキストにデコードできますか? – Patuda

+0

'' 60,33,100,111、99 >>#=> "<!doc"はHTMLページを取得しているようですね。そのページのどこかに無効なUTF-8コンテンツがあるようです。実際のURLを共有することは可能でしょうか?いずれにせよ、それを端末に書きたいだけなら、 'IO.binwrite(body)'を行うことができます。 – Dogbert

答えて

3

IO.putsは、このエラーで失敗します.bodyは有効なUTF-8データではないためです。あなたがstdoutに非UTF-8バイナリを書きたい場合は、代わりにIO.putsIO.binwriteを使用することができます。

IO.binwrite(body) 
関連する問題