Force stdin/stdout encoding to UTF-8
The character encoding of the stdin/stdout streams in Python is platform- dependent. On Windows it will be something weird, like CP437 or CP1252, depending on the locale. This change ensures that no matter the platform, UTF-8 is used.
This commit is contained in:
parent
68fcf92947
commit
d92ee8feaa
1 changed files with 6 additions and 3 deletions
|
|
@ -20,6 +20,7 @@ Example usage:
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
from io import TextIOWrapper
|
||||||
|
|
||||||
import anyio
|
import anyio
|
||||||
import anyio.lowlevel
|
import anyio.lowlevel
|
||||||
|
|
@ -38,11 +39,13 @@ async def stdio_server(
|
||||||
from the current process' stdin and writing to stdout.
|
from the current process' stdin and writing to stdout.
|
||||||
"""
|
"""
|
||||||
# Purposely not using context managers for these, as we don't want to close
|
# Purposely not using context managers for these, as we don't want to close
|
||||||
# standard process handles.
|
# standard process handles. Encoding of stdin/stdout as text streams on
|
||||||
|
# python is platform-dependent (Windows is particularly problematic), so we
|
||||||
|
# re-wrap the underlying binary stream to ensure UTF-8.
|
||||||
if not stdin:
|
if not stdin:
|
||||||
stdin = anyio.wrap_file(sys.stdin)
|
stdin = anyio.wrap_file(TextIOWrapper(sys.stdin.buffer, encoding="utf-8"))
|
||||||
if not stdout:
|
if not stdout:
|
||||||
stdout = anyio.wrap_file(sys.stdout)
|
stdout = anyio.wrap_file(TextIOWrapper(sys.stdout.buffer, encoding="utf-8"))
|
||||||
|
|
||||||
read_stream: MemoryObjectReceiveStream[types.JSONRPCMessage | Exception]
|
read_stream: MemoryObjectReceiveStream[types.JSONRPCMessage | Exception]
|
||||||
read_stream_writer: MemoryObjectSendStream[types.JSONRPCMessage | Exception]
|
read_stream_writer: MemoryObjectSendStream[types.JSONRPCMessage | Exception]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue