diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 0f647eed99d81bda47eb82381b7e6798a5c7197c..0bfdeaafae274bb5d98a49ebd42600000be4ce9d 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -2022,13 +2022,7 @@ def __init__(self, buffer, encoding=None, errors=None, newline=None,
         encoding = text_encoding(encoding)
 
         if encoding == "locale":
-            try:
-                import locale
-            except ImportError:
-                # Importing locale may fail if Python is being built
-                encoding = "utf-8"
-            else:
-                encoding = locale.getencoding()
+            encoding = self._get_locale_encoding()
 
         if not isinstance(encoding, str):
             raise ValueError("invalid encoding: %r" % encoding)
@@ -2162,7 +2156,7 @@ def reconfigure(self, *,
             if not isinstance(encoding, str):
                 raise TypeError("invalid encoding: %r" % encoding)
             if encoding == "locale":
-                encoding = locale.getencoding()
+                encoding = self._get_locale_encoding()
 
         if newline is Ellipsis:
             newline = self._readnl
@@ -2267,6 +2261,15 @@ def _get_decoded_chars(self, n=None):
         self._decoded_chars_used += len(chars)
         return chars
 
+    def _get_locale_encoding(self):
+        try:
+            import locale
+        except ImportError:
+            # Importing locale may fail if Python is being built
+            return "utf-8"
+        else:
+            return locale.getencoding()
+
     def _rewind_decoded_chars(self, n):
         """Rewind the _decoded_chars buffer."""
         if self._decoded_chars_used < n:
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 039da535d488a330665ef057729da56a4ba74365..daccbae5b4a1da4a61c8b6346a6b3afa3c13f3b3 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3570,6 +3570,10 @@ def seekable(self): return True
         F.tell = lambda x: 0
         t = self.TextIOWrapper(F(), encoding='utf-8')
 
+    def test_reconfigure_locale(self):
+        wrapper = io.TextIOWrapper(io.BytesIO(b"test"))
+        wrapper.reconfigure(encoding="locale")
+
     def test_reconfigure_encoding_read(self):
         # latin1 -> utf8
         # (latin1 can decode utf-8 encoded string)