Issue #12112: fix the encoding of setup.py in the packaging module

 * read: use tokenize.detect_encoding()
 * write: use 'utf-8'
diff --git a/Lib/packaging/util.py b/Lib/packaging/util.py
index 058f13e..71ce819 100644
--- a/Lib/packaging/util.py
+++ b/Lib/packaging/util.py
@@ -346,9 +346,9 @@
         logger.info("writing byte-compilation script '%s'", script_name)
         if not dry_run:
             if script_fd is not None:
-                script = os.fdopen(script_fd, "w")
+                script = os.fdopen(script_fd, "w", encoding='utf-8')
             else:
-                script = open(script_name, "w")
+                script = open(script_name, "w", encoding='utf-8')
 
             with script:
                 script.write("""\
@@ -1087,7 +1087,7 @@
     if os.path.exists("setup.py"):
         raise PackagingFileError("a setup.py file alreadyexists")
 
-    with open("setup.py", "w") as fp:
+    with open("setup.py", "w", encoding='utf-8') as fp:
         fp.write(_SETUP_TMPL % {'func': getsource(cfg_to_args)})