Skip to content
Permalink
Browse files

bpo-32409: Fix regression in activate.bat on international Windows (G…

…H-10295) (GH-10377)

Handle Unicode contents on localised Windows systems when activating a
venv. activate.bat currently breaks on German Windows systems, as chcp.com does
not return a plain number as on English systems, but (arbitrarily) appends a dot at the end
(for example "Aktive Codepage: 850." instead of "Active Codepage: 850"). The
dependency to chcp.com is removed and ctypes is used to get, set and restore the
console output code page. The code page for console input is not changed.

We can't use __VENV_PYTHON__ to find python.exe, since it's UTF-8. cmd.exe decodes
the script using the console output code page.
(cherry picked from commit c64583b)

Co-authored-by: samstagern <30337691+samstagern@users.noreply.github.com>
  • Loading branch information
2 people authored and vsajip committed Nov 7, 2018
1 parent e40e205 commit 881e273c795f2f5154b8afebfa299f0e830f3712
@@ -1,11 +1,10 @@
@echo off

rem This file is UTF-8 encoded, so we need to update the current code page while executing it
for /f "tokens=2 delims=:" %%a in ('"%SystemRoot%\System32\chcp.com"') do (
set "_OLD_CODEPAGE=%%a"
)
rem This file is UTF-8 encoded, so we need to update the current code page while executing it.
for /f %%a in ('%~dp0python.exe -Ic "import ctypes; print(ctypes.windll.kernel32.GetConsoleOutputCP())"') do (set "_OLD_CODEPAGE=%%a")

if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" 65001 > nul
%~dp0python.exe -Ic "import ctypes; ctypes.windll.kernel32.SetConsoleOutputCP(65001)"
)

set "VIRTUAL_ENV=__VENV_DIR__"
@@ -40,6 +39,6 @@ set "PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%"

:END
if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
%~dp0python.exe -Ic "import ctypes; ctypes.windll.kernel32.SetConsoleOutputCP(%_OLD_CODEPAGE%)"
set "_OLD_CODEPAGE="
)
@@ -0,0 +1,2 @@
Fixed implementation of :file:`activate.bat` to handle Unicode contents on
localized Windows systems (eg. German). Patch by Martin Bijl.

0 comments on commit 881e273

Please sign in to comment.
You can’t perform that action at this time.