diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py
index 1cfe827c6d681d6381885ea07628d5beaea29726..ce9c3d36dba359c722b1a936ed5f396f383e637b 100644
--- a/Lib/nturl2path.py
+++ b/Lib/nturl2path.py
@@ -56,7 +56,7 @@ def pathname2url(p):
 
     drive = urllib.parse.quote(comp[0].upper())
     components = comp[1].split('\\')
-    path = '///' + drive + '|'
+    path = '///' + drive + ':'
     for comp in components:
         if comp:
             path = path + '/' + urllib.parse.quote(comp)
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index d616eb171364f3d7d457057eccc52de1a3164f84..da6bc2d48868667785bddfb5c582e872b80cc643 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -837,6 +837,18 @@ class Utility_Tests(unittest.TestCase):
         self.assertEqual(('user', 'a\vb'),urllib.parse.splitpasswd('user:a\vb'))
         self.assertEqual(('user', 'a:b'),urllib.parse.splitpasswd('user:a:b'))
 
+
+class URLopener_Tests(unittest.TestCase):
+    """Testcase to test the open method of URLopener class."""
+
+    def test_quoted_open(self):
+        class DummyURLopener(urllib.request.URLopener):
+            def open_spam(self, url):
+                return url
+
+        self.assertEqual(DummyURLopener().open(
+            'spam://example/ /'),'//example/%20/')
+
 # Just commented them out.
 # Can't really tell why keep failing in windows and sparc.
 # Everywhere else they work ok, but on those machines, someteimes
@@ -928,6 +940,7 @@ def test_main():
         urlencode_Tests,
         Pathname_Tests,
         Utility_Tests,
+        URLopener_Tests,
         #FTPWrapperTests,
     )
 
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index 42e6d17206dd398073438047ffa416b371c597c6..89ac22a8f12f95da055879f1ebb274c5257d5d33 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -1398,6 +1398,7 @@ class URLopener:
     def open(self, fullurl, data=None):
         """Use URLopener().open(file) instead of open(file, 'r')."""
         fullurl = unwrap(to_bytes(fullurl))
+        fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]")
         if self.tempcache and fullurl in self.tempcache:
             filename, headers = self.tempcache[fullurl]
             fp = open(filename, 'rb')