Issue with Latin Characters in URL

Getting UTF-8 when attempting to get a URL with Latin characters in the URL.

## Expected Result

<Response [200]>

## Actual Result

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 668, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 668, in <listcomp>
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 247, in resolve_redirects
    **adapter_kwargs
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 681, in send
    r._next = next(self.resolve_redirects(r, request, yield_requests=True, **kwargs))
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 149, in resolve_redirects
    url = self.get_redirect_target(resp)
  File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 115, in get_redirect_target
    return to_native_string(location, 'utf8')
  File "/usr/local/lib/python3.7/site-packages/requests/_internal_utils.py", line 25, in to_native_string
    out = string.decode(encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 64: invalid continuation byte

## Reproduction Steps

```python
import requests
requests.get("http://www.janes.com/article/92450/south-korea-launches-philippine-navy-s-second-josé-rizal-class-frigate?from_rss=1")
```

## System Information

    $ python -m requests.help

```
{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": ""
  },
  "idna": {
    "version": "2.7"
  },
  "implementation": {
    "name": "CPython",
    "version": "3.7.3"
  },
  "platform": {
    "release": "19.0.0",
    "system": "Darwin"
  },
  "pyOpenSSL": {
    "openssl_version": "",
    "version": null
  },
  "requests": {
    "version": "2.22.0"
  },
  "system_ssl": {
    "version": "1000212f"
  },
  "urllib3": {
    "version": "1.23"
  },
  "using_pyopenssl": false
}
```



**NB: Encoding of `é`: in utf-8, it is `\xC3\xA9`, in latin1, it is `\xE9`**

Here's what I found:

## Opening with Firefox
When I open with firefox, 
1. `http://www.janes.com/article/92450/south-korea-launches-philippine-navy-s-second-jos%C3%A9-rizal-class-frigate?from_rss=1` got 302 redirected to https url `http://www.janes.com/article/92450/south-korea-launches-philippine-navy-s-second-jos%C3%A9-rizal-class-frigate?from_rss=1`.

2. UTF-8 encoding of diacritics `é` `https://www.janes.com/article/92450/south-korea-launches-philippine-navy-s-second-jos%C3%A9-rizal-class-frigate?from_rss=1` got 301 redirected with the following response headers:
```
HTTP/1.1 301 Moved Permanently
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html;charset=UTF-8
Location: /article/92450/south-korea-launches-philippine-navy-s-second-josé-rizal-class-frigate?from_rss=1
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
GsWebServer2: V-VWC2PPTSWB03
Date: Tue, 12 Nov 2019 08:28:03 GMT
Content-Length: 0
```
 I don't know what encoding is being used in the firefox showing the HTTP headers. But:

3. Firefox retries with `https://www.janes.com/article/92450/south-korea-launches-philippine-navy-s-second-jos%E9-rizal-class-frigate?from_rss=1`` and get a 200.

## The source of the error (encoding mismatch)
In `requests`, we [encode the redirect url to `latin1`](https://github.com/psf/requests/commit/722b1dae96b0523dde5e01351dd743f102090f53) but later [decode it as `utf8`](https://github.com/psf/requests/commit/722b1dae96b0523dde5e01351dd743f102090f53). (i.e., `b'jos\xe9a'.decode('utf-8')` will raise error in python.

## Attempt to solve
Looking at the `get_redirect_target` code
``` python
    def get_redirect_target(self, resp):
        """Receives a Response. Returns a redirect URI or ``None``"""
        # Due to the nature of how requests processes redirects this method will
        # ......
        if resp.is_redirect:
            location = resp.headers['location']
            # Currently the underlying http module on py3 decode headers
            # in latin1, but empirical evidence suggests that latin1 is very
            # rarely used with non-ASCII characters in HTTP headers.
            # It is more likely to get UTF8 header rather than latin1.
            # This causes incorrect handling of UTF8 encoded location headers.
            # To solve this, we re-encode the location in latin1.
            if is_py3:
                location = location.encode('latin1')
            return to_native_string(location, 'utf8')
        return None
```
Looks like I can fix it by changing it to 
``` python
    def get_redirect_target(self, resp):
        if resp.is_redirect:
            location = resp.headers['location']
            if is_py3:
                location = location.encode('latin1')
                return to_native_string(location, 'latin1')
            return to_native_string(location, 'utf8')
        return None
```
And yes, the previous error is gone, but I will get `requests.exceptions.TooManyRedirects: Exceeded 30 redirects`, since it misses the step 3 of the firefox smartly send the latin1 encoded url to get the 200. It might be solved if I can somehow passed the encoded location instead of passing the native string, but turns out that the rest of the function (`resolve_redirects`) depends on the fact that the url is native string.

## Conclusion
I don't know whether the problem is with the behavior of the website (not complying to RFC, but firefox nevertheless works on it). My speculation is that probably firefox will just reattempt with different encoding (first will try utf8, then try with latin1). And thus probably this website is one of the "rarely" website that use latin1 instead of utf-8.
``` python
            # Currently the underlying http module on py3 decode headers
            # in latin1, but empirical evidence suggests that latin1 is very
            # rarely used with non-ASCII characters in HTTP headers.
            # It is more likely to get UTF8 header rather than latin1.
            # This causes incorrect handling of UTF8 encoded location headers.
            # To solve this, we re-encode the location in latin1.
            if is_py3:
                location = location.encode('latin1')
```

Let me know for any thoughts or suggestion for solution, I will be more than happy to try working on it.

This looks like a duplicate of #4372 and #4926 with an open (but old) PR #4933