Issue 1:
In requests 2.9.0:

>>> requests.patch('https://example.org', data=bytes('ô', 'utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/api.py", line 133, in patch
return request('patch', url, data=data, **kwargs)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/sessions.py", line 454, in request
prep = self.prepare_request(req)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/sessions.py", line 388, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/models.py", line 296, in prepare
self.prepare_body(data, files, json)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/models.py", line 447, in prepare_body
body = self._encode_params(data)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/models.py", line 84, in _encode_params
return to_native_string(data)
File "/usr/local/combine/virtualenv/lib/python3.4/site-packages/requests/utils.py", line 700, in to_native_string
out = string.decode(encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

This seems to be a problem with all strings containing Unicode characters. It works without problems in 2.8.1.

Issue 2:
Hello,

Our library suddenly stops to works in Python 3 for our users after requests 2.9 release, for instance:

Azure/azure-storage-python#89

I investigated the stack trace, and I found that when the body of the requests contains "real" bytes ("real" stands for OSImage, PDF,... not something readable), the code breaks.

Especially, requests 2.9 in requests.models#_encode_params calls a new method requests.utils#to_native_string which tries to convert my bytes data using an ASCII encoder which is not possible if data are "real" bytes.

This is the interesting part of the stacktrace extracting from the previously mentioned bug

self.response = self.session.request(self.method, self.uri, data=request_body, headers=self.headers, timeout=self.timeout)
File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 454, in request
prep = self.prepare_request(req)
File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 388, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/local/lib/python3.5/site-packages/requests/models.py", line 296, in prepare
self.prepare_body(data, files, json)
File "/usr/local/lib/python3.5/site-packages/requests/models.py", line 447, in prepare_body
body = self._encode_params(data)
File "/usr/local/lib/python3.5/site-packages/requests/models.py", line 84, in _encode_params
return to_native_string(data)
File "/usr/local/lib/python3.5/site-packages/requests/utils.py", line 700, in to_native_string
out = string.decode(encoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

What do you think? Tell me if I can help for anything.

Thank you,