summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/_pyio.py19
-rw-r--r--Lib/test/test_io.py4
2 files changed, 15 insertions, 8 deletions
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 0f647ee..0bfdeaa 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -2022,13 +2022,7 @@ class TextIOWrapper(TextIOBase):
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 @@ class TextIOWrapper(TextIOBase):
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 @@ class TextIOWrapper(TextIOBase):
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 039da53..daccbae 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3570,6 +3570,10 @@ class TextIOWrapperTest(unittest.TestCase):
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)