diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/_pyio.py | 19 | ||||
-rw-r--r-- | Lib/test/test_io.py | 4 |
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) |