Skip to content

Commit 6485a01

Browse files
🐛 fix(config): read a set_env file as UTF-8 (#4059)
1 parent a61fcfb commit 6485a01

3 files changed

Lines changed: 11 additions & 1 deletion

File tree

docs/changelog/4059.bugfix.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
A ``set_env`` environment file (``file|.env``) is now read as UTF-8 instead of the platform's locale encoding, so
2+
non-ASCII values no longer arrive mangled on Windows - by :user:`MohammedAlkindi`.

src/tox/config/set_env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def _stream_env_file(self, filename: str, args: ConfigLoadArgs) -> Iterator[tupl
121121
if not env_file.exists():
122122
msg = f"{env_file} does not exist for set_env"
123123
raise Fail(msg)
124-
for env_line in env_file.read_text().splitlines():
124+
for env_line in env_file.read_text(encoding="utf-8").splitlines():
125125
env_line = env_line.strip() # ruff:ignore[redefined-loop-name]
126126
if not env_line or env_line.startswith("#"):
127127
continue

tests/config/test_set_env.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,14 @@ def test_set_env_environment_file(
201201
}
202202

203203

204+
def test_set_env_environment_file_is_utf8(eval_set_env: EvalSetEnv) -> None:
205+
set_env = eval_set_env(
206+
"[testenv]\npackage=skip\nset_env=file|.env",
207+
extra_files={".env": "GREETING=Grüße\n"},
208+
)
209+
assert set_env.load("GREETING") == "Grüße"
210+
211+
204212
@pytest.mark.parametrize(
205213
("of_type", "config"),
206214
[

0 commit comments

Comments
 (0)