summaryrefslogtreecommitdiffstats
path: root/Lib/_pyio.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/_pyio.py')
-rw-r--r--Lib/_pyio.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index e3ff59e..0f33ed5 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -1988,7 +1988,7 @@ class TextIOWrapper(TextIOBase):
r"""Character and line based layer over a BufferedIOBase object, buffer.
encoding gives the name of the encoding that the stream will be
- decoded or encoded with. It defaults to locale.getpreferredencoding(False).
+ decoded or encoded with. It defaults to locale.getencoding().
errors determines the strictness of encoding and decoding (see the
codecs.register) and defaults to "strict".
@@ -2021,7 +2021,9 @@ class TextIOWrapper(TextIOBase):
self._check_newline(newline)
encoding = text_encoding(encoding)
- if encoding == "locale":
+ if encoding == "locale" and sys.platform == "win32":
+ # On Unix, os.device_encoding() returns "utf-8" instead of locale encoding
+ # in the UTF-8 mode. So we use os.device_encoding() only on Windows.
try:
encoding = os.device_encoding(buffer.fileno()) or "locale"
except (AttributeError, UnsupportedOperation):
@@ -2034,7 +2036,7 @@ class TextIOWrapper(TextIOBase):
# Importing locale may fail if Python is being built
encoding = "utf-8"
else:
- encoding = locale.getpreferredencoding(False)
+ encoding = locale.getencoding()
if not isinstance(encoding, str):
raise ValueError("invalid encoding: %r" % encoding)