diff --git a/lib/faraday/logging/formatter.rb b/lib/faraday/logging/formatter.rb index 2fd4bb1da..c066b0fe3 100644 --- a/lib/faraday/logging/formatter.rb +++ b/lib/faraday/logging/formatter.rb @@ -63,7 +63,7 @@ def dump_headers(headers) def dump_body(body) if body.respond_to?(:to_str) - body.to_str + body.to_str.encode(Encoding::UTF_8, undef: :replace, invalid: :replace) else pretty_inspect(body) end diff --git a/spec/faraday/response/logger_spec.rb b/spec/faraday/response/logger_spec.rb index e8e0bf3f9..6f8e11ffc 100644 --- a/spec/faraday/response/logger_spec.rb +++ b/spec/faraday/response/logger_spec.rb @@ -21,6 +21,7 @@ stubs.post('/ohai') { [200, { 'Content-Type' => 'text/html' }, 'fred'] } stubs.post('/ohyes') { [200, { 'Content-Type' => 'text/html' }, 'pebbles'] } stubs.get('/rubbles') { [200, { 'Content-Type' => 'application/json' }, rubbles] } + stubs.get('/8bit') { [200, { 'Content-Type' => 'text/html' }, (+'café!').force_encoding(Encoding::ASCII_8BIT)] } stubs.get('/filtered_body') { [200, { 'Content-Type' => 'text/html' }, 'soylent green is people'] } stubs.get('/filtered_headers') { [200, { 'Content-Type' => 'text/html' }, 'headers response'] } stubs.get('/filtered_params') { [200, { 'Content-Type' => 'text/html' }, 'params response'] } @@ -238,6 +239,11 @@ def response(_env) expect(string_io.string).to match(%(fred)) end + it 'converts to UTF-8' do + conn.get '/8bit' + expect(string_io.string).to match(%(caf��!)) + end + after do described_class.default_options = { bodies: false } end