Issue #28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk Sun)
This commit is contained in:
parent
c3215f530f
commit
3cd187b9f5
|
@ -213,6 +213,8 @@ Library
|
|||
Windows
|
||||
-------
|
||||
|
||||
- Issue #28333: Enables Unicode for ps1/ps2 and input() prompts
|
||||
|
||||
- Issue #28251: Improvements to help manuals on Windows.
|
||||
|
||||
- Issue #28110: launcher.msi has different product codes between 32-bit and
|
||||
|
|
|
@ -203,17 +203,37 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
|
|||
|
||||
#ifdef MS_WINDOWS
|
||||
if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) {
|
||||
HANDLE hStdIn;
|
||||
HANDLE hStdIn, hStdErr;
|
||||
|
||||
_Py_BEGIN_SUPPRESS_IPH
|
||||
hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin));
|
||||
hStdErr = (HANDLE)_get_osfhandle(fileno(stderr));
|
||||
_Py_END_SUPPRESS_IPH
|
||||
|
||||
if (_get_console_type(hStdIn) == 'r') {
|
||||
fflush(sys_stdout);
|
||||
if (prompt)
|
||||
fprintf(stderr, "%s", prompt);
|
||||
fflush(stderr);
|
||||
if (prompt) {
|
||||
if (_get_console_type(hStdErr) == 'w') {
|
||||
wchar_t *wbuf;
|
||||
int wlen;
|
||||
wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, -1,
|
||||
NULL, 0);
|
||||
if (wlen++ &&
|
||||
(wbuf = PyMem_RawMalloc(wlen * sizeof(wchar_t)))) {
|
||||
wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, -1,
|
||||
wbuf, wlen);
|
||||
if (wlen) {
|
||||
DWORD n;
|
||||
fflush(stderr);
|
||||
WriteConsoleW(hStdErr, wbuf, wlen, &n, NULL);
|
||||
}
|
||||
PyMem_RawFree(wbuf);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "%s", prompt);
|
||||
fflush(stderr);
|
||||
}
|
||||
}
|
||||
clearerr(sys_stdin);
|
||||
return _PyOS_WindowsConsoleReadline(hStdIn);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue