diff --git a/Lib/packaging/config.py b/Lib/packaging/config.py
index 9239f4a..9875f68 100644
--- a/Lib/packaging/config.py
+++ b/Lib/packaging/config.py
@@ -282,7 +282,7 @@
 
         for filename in filenames:
             logger.debug("  reading %s", filename)
-            parser.read(filename)
+            parser.read(filename, encoding='utf-8')
 
             if os.path.split(filename)[-1] == 'setup.cfg':
                 self._read_setup_cfg(parser, filename)
diff --git a/Lib/packaging/create.py b/Lib/packaging/create.py
index 0676cf1..1df73da 100644
--- a/Lib/packaging/create.py
+++ b/Lib/packaging/create.py
@@ -276,7 +276,7 @@
                 return
             shutil.move(_FILENAME, '%s.old' % _FILENAME)
 
-        with open(_FILENAME, 'w') as fp:
+        with open(_FILENAME, 'w', encoding='utf-8') as fp:
             fp.write('[metadata]\n')
             # simple string entries
             for name in ('name', 'version', 'summary', 'download_url'):
diff --git a/Lib/packaging/tests/support.py b/Lib/packaging/tests/support.py
index dbd8683..329b755 100644
--- a/Lib/packaging/tests/support.py
+++ b/Lib/packaging/tests/support.py
@@ -138,7 +138,7 @@
         d = tempfile.mkdtemp(dir=self._basetempdir)
         return d
 
-    def write_file(self, path, content='xxx'):
+    def write_file(self, path, content='xxx', encoding=None):
         """Write a file at the given path.
 
         path can be a string, a tuple or a list; if it's a tuple or list,
@@ -146,7 +146,7 @@
         """
         if isinstance(path, (list, tuple)):
             path = os.path.join(*path)
-        with open(path, 'w') as f:
+        with open(path, 'w', encoding=encoding) as f:
             f.write(content)
 
     def create_dist(self, **kw):
diff --git a/Lib/packaging/tests/test_config.py b/Lib/packaging/tests/test_config.py
index 8908c4f..e6e5586 100644
--- a/Lib/packaging/tests/test_config.py
+++ b/Lib/packaging/tests/test_config.py
@@ -183,7 +183,7 @@
                 'setup-hook': 'packaging.tests.test_config.hook'}
         if kwargs:
             opts.update(kwargs)
-        self.write_file('setup.cfg', SETUP_CFG % opts)
+        self.write_file('setup.cfg', SETUP_CFG % opts, encoding='utf-8')
 
     def get_dist(self):
         dist = Distribution()
diff --git a/Lib/packaging/tests/test_create.py b/Lib/packaging/tests/test_create.py
index 9c7a912..42cf34b 100644
--- a/Lib/packaging/tests/test_create.py
+++ b/Lib/packaging/tests/test_create.py
@@ -91,7 +91,7 @@
     def test_convert_setup_py_to_cfg(self):
         self.write_file((self.wdir, 'setup.py'),
                         dedent("""
-        # -*- coding: utf-8 -*-
+        # coding: utf-8
         from distutils.core import setup
 
         long_description = '''My super Death-scription
@@ -124,12 +124,12 @@
                            },
               scripts=['my_script', 'bin/run'],
               )
-        """))
+        """), encoding='utf-8')
         sys.stdin.write('y\n')
         sys.stdin.seek(0)
         main()
 
-        with open(os.path.join(self.wdir, 'setup.cfg')) as fp:
+        with open(os.path.join(self.wdir, 'setup.cfg'), encoding='utf-8') as fp:
             lines = set(line.rstrip() for line in fp)
 
         # FIXME don't use sets
@@ -171,7 +171,7 @@
     def test_convert_setup_py_to_cfg_with_description_in_readme(self):
         self.write_file((self.wdir, 'setup.py'),
                         dedent("""
-        # -*- coding: utf-8 -*-
+        # coding: utf-8
         from distutils.core import setup
         with open('README.txt') as fp:
             long_description = fp.read()
@@ -191,7 +191,7 @@
                 ('share/man', ['pyxfoil.1']),
               ],
         )
-        """))
+        """), encoding='utf-8')
         self.write_file((self.wdir, 'README.txt'),
                         dedent('''
 My super Death-scription
@@ -202,7 +202,7 @@
         sys.stdin.seek(0)
         # FIXME Out of memory error.
         main()
-        with open(os.path.join(self.wdir, 'setup.cfg')) as fp:
+        with open(os.path.join(self.wdir, 'setup.cfg'), encoding='utf-8') as fp:
             lines = set(line.rstrip() for line in fp)
 
         self.assertEqual(lines, set(['',
