diff --git a/Lib/distutils/command/register.py b/Lib/distutils/command/register.py
index fb547c9..dc08990 100644
--- a/Lib/distutils/command/register.py
+++ b/Lib/distutils/command/register.py
@@ -266,7 +266,6 @@
             if type(value) not in (type([]), type( () )):
                 value = [value]
             for value in value:
-                value = unicode(value).encode("utf-8")
                 body.write(sep_boundary)
                 body.write('\nContent-Disposition: form-data; name="%s"'%key)
                 body.write("\n\n")
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 3e18aea..18a10a0 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -145,7 +145,7 @@
                     value = value[1]
                 else:
                     fn = ""
-                value = str(value)
+
                 body.write(sep_boundary)
                 body.write('\nContent-Disposition: form-data; name="%s"'%key)
                 body.write(fn)
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index f20a92a..5dbdaef 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -1139,16 +1139,19 @@
         self._write_list(file, 'Obsoletes', self.get_obsoletes())
 
     def _write_field(self, file, name, value):
-        if isinstance(value, unicode):
-            value = value.encode(PKG_INFO_ENCODING)
-        else:
-            value = str(value)
-        file.write('%s: %s\n' % (name, value))
+        file.write('%s: %s\n' % (name, self._encode_field(value)))
 
     def _write_list (self, file, name, values):
         for value in values:
             self._write_field(file, name, value)
 
+    def _encode_field(self, value):
+        if value is None:
+            return None
+        if isinstance(value, unicode):
+            return value.encode(PKG_INFO_ENCODING)
+        return str(value)
+
     # -- Metadata query methods ----------------------------------------
 
     def get_name(self):
@@ -1161,19 +1164,20 @@
         return "%s-%s" % (self.get_name(), self.get_version())
 
     def get_author(self):
-        return self.author or "UNKNOWN"
+        return self._encode_field(self.author) or "UNKNOWN"
 
     def get_author_email(self):
         return self.author_email or "UNKNOWN"
 
     def get_maintainer(self):
-        return self.maintainer or "UNKNOWN"
+        return self._encode_field(self.maintainer) or "UNKNOWN"
 
     def get_maintainer_email(self):
         return self.maintainer_email or "UNKNOWN"
 
     def get_contact(self):
-        return self.maintainer or self.author or "UNKNOWN"
+        return (self._encode_field(self.maintainer) or
+                self._encode_field(self.author) or "UNKNOWN")
 
     def get_contact_email(self):
         return self.maintainer_email or self.author_email or "UNKNOWN"
@@ -1186,10 +1190,10 @@
     get_licence = get_license
 
     def get_description(self):
-        return self.description or "UNKNOWN"
+        return self._encode_field(self.description) or "UNKNOWN"
 
     def get_long_description(self):
-        return self.long_description or "UNKNOWN"
+        return self._encode_field(self.long_description) or "UNKNOWN"
 
     def get_keywords(self):
         return self.keywords or []
diff --git a/Lib/distutils/tests/test_register.py b/Lib/distutils/tests/test_register.py
index ada77a0..370d659 100644
--- a/Lib/distutils/tests/test_register.py
+++ b/Lib/distutils/tests/test_register.py
@@ -1,4 +1,5 @@
 """Tests for distutils.command.register."""
+# -*- encoding: utf8 -*-
 import sys
 import os
 import unittest
@@ -136,9 +137,7 @@
         self.assertTrue(self.conn.reqs, 2)
         req1 = dict(self.conn.reqs[0].headers)
         req2 = dict(self.conn.reqs[1].headers)
-
-        self.assertEquals(req1['Content-length'], '1374')
-        self.assertEquals(req2['Content-length'], '1374')
+        self.assertEquals(req2['Content-length'], req1['Content-length'])
         self.assertTrue('xxx' in self.conn.reqs[1].data)
 
     def test_password_not_in_file(self):
@@ -210,7 +209,7 @@
 
         # metadata are OK but long_description is broken
         metadata = {'url': 'xxx', 'author': 'xxx',
-                    'author_email': 'xxx',
+                    'author_email': u'éxéxé',
                     'name': 'xxx', 'version': 'xxx',
                     'long_description': 'title\n==\n\ntext'}
 
diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py
index 8f6701c..3ae8949 100644
--- a/Lib/distutils/tests/test_upload.py
+++ b/Lib/distutils/tests/test_upload.py
@@ -1,4 +1,5 @@
 """Tests for distutils.command.upload."""
+# -*- encoding: utf8 -*-
 import sys
 import os
 import unittest
@@ -107,14 +108,15 @@
         self.write_file(self.rc, PYPIRC_LONG_PASSWORD)
 
         # lets run it
-        pkg_dir, dist = self.create_dist(dist_files=dist_files)
+        pkg_dir, dist = self.create_dist(dist_files=dist_files, author=u'dédé')
         cmd = upload(dist)
         cmd.ensure_finalized()
         cmd.run()
 
         # what did we send ?
+        self.assertIn('dédé', self.last_open.req.data)
         headers = dict(self.last_open.req.headers)
-        self.assertEquals(headers['Content-length'], '2086')
+        self.assertEquals(headers['Content-length'], '2085')
         self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
         self.assertEquals(self.last_open.req.get_method(), 'POST')
         self.assertEquals(self.last_open.req.get_full_url(),
diff --git a/Misc/NEWS b/Misc/NEWS
index fa5df7d..f1ab688 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -42,6 +42,11 @@
 Library
 -------
 
+- Issue #7748: Since unicode values are supported for some metadata options
+  in Distutils, the DistributionMetadata get_* methods will now return an utf-8
+  encoded string for them. This ensure that the upload and register commands
+  send the right values to PyPI without any error.
+
 - Issue #1670765: Prevent email.generator.Generator from re-wrapping
   headers in multipart/signed MIME parts, which fixes one of the sources of
   invalid modifications to such parts by Generator.
@@ -186,7 +191,7 @@
 - Distutils now correctly identifies the build architecture as "x86_64"
   when building on OSX 10.6 without "-arch" flags.
 
-- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest 
+- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest
   file in text mode.
 
 - Issue #7552: Removed line feed in the base64 Authorization header in
