Support CJK parameters when post files
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 1d66c4bf70..9a7f25d5e8 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -114,3 +114,4 @@ Patches and Suggestions
 - Ian Cordasco <graffatcolmingov@gmail.com> @sigmavirus24
 - Rhys Elsmore
 - André Graf (dergraf)
+- Stephen Zhuang (everbird)
diff --git a/requests/models.py b/requests/models.py
index 78311491cd..f34b6f766c 100644
--- a/requests/models.py
+++ b/requests/models.py
@@ -360,9 +360,9 @@ def _encode_files(self, files):
         for field, val in fields:
             if isinstance(val, list):
                 for v in val:
-                    new_fields.append((field, str(v)))
+                    new_fields.append((field, builtin_str(v)))
             else:
-                new_fields.append((field, str(val)))
+                new_fields.append((field, builtin_str(val)))
 
         for (k, v) in files:
             # support for explicit filename
diff --git a/tests/test_requests.py b/tests/test_requests.py
index 3d6f49c293..6726de8e42 100755
--- a/tests/test_requests.py
+++ b/tests/test_requests.py
@@ -336,12 +336,23 @@ def test_POSTBIN_GET_POST_FILES_WITH_PARAMS(self):
 
             with open(__file__) as f:
                 url = service('post')
-                post1 = post(url,
-                             files={'some': f},
-                             data={'some': 'data'})
+                post1 = post(url, data={'some': 'data'}, files={'some': f})
                 post2 = post(url, data={'some': 'data'}, files=[('some', f)])
-                post3 = post(url, data=[('some', 'data')],
-                        files=[('some', f)])
+                post3 = post(url, data=[('some', 'data')], files=[('some', f)])
+
+            self.assertEqual(post1.status_code, 200)
+            self.assertEqual(post2.status_code, 200)
+            self.assertEqual(post3.status_code, 200)
+
+    def test_POSTBIN_GET_POST_FILES_WITH_CJK_PARAMS(self):
+
+        for service in SERVICES:
+
+            with open(__file__) as f:
+                url = service('post')
+                post1 = post(url, data={'some': '中文'}, files={'some': f})
+                post2 = post(url, data={'some': '日本語'}, files=[('some', f)])
+                post3 = post(url, data=[('some', '한국의')], files=[('some', f)])
 
             self.assertEqual(post1.status_code, 200)
             self.assertEqual(post2.status_code, 200)

When I post files with CJK parameters I got this exception:

```
Traceback (most recent call last):
  File "/home/everbird/code/requests/tests/test_requests.py", line 358, in test_POSTBIN_GET_POST_FILES_WITH_CJK_PARAMS
    data={'some': '中文'})
  File "/home/everbird/code/requests/requests/api.py", line 98, in post
    return request('post', url, data=data, **kwargs)
  File "/home/everbird/code/requests/requests/safe_mode.py", line 39, in wrapped
    return function(method, url, **kwargs)
  File "/home/everbird/code/requests/requests/api.py", line 51, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/everbird/code/requests/requests/sessions.py", line 241, in request
    r.send(prefetch=prefetch)
  File "/home/everbird/code/requests/requests/models.py", line 529, in send
    (body, content_type) = self._encode_files(self.files)
  File "/home/everbird/code/requests/requests/models.py", line 365, in _encode_files
    new_fields.append((field, str(val)))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
```

For py2, `str` is actually `unicode` according to `requests/compat.py`. It is OK like this:

``` python
In [1]: str('a')
Out[1]: 'a'

In [2]: unicode('a')
Out[2]: u'a'
```

but it failed as below:

``` python
In [3]: str('中文')
Out[3]: '\xe4\xb8\xad\xe6\x96\x87'

In [4]: unicode('中文')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-4-a7400b671605> in <module>()
----> 1 unicode('中文')

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
```

In `requests/models.py` at line 363-365 the `str()` seems should be the builtin `str`, not `unicode`. So I wrote a test named `test_POSTBIN_GET_POST_FILES_WITH_CJK_PARAMS` and fixed it.

Hope it helps. 
