---
title: Specify Encoding When Opening Files
impact: MEDIUM
impactDescription: Omitting encoding when opening text files causes silent failures on systems with non-UTF-8 locale, resulting in UnicodeDecodeError or garbled data in production.
tags: python, encoding, files, portability, quality
---

## Specify Encoding When Opening Files

When calling `open()` in text mode without an explicit `encoding` argument, Python uses the OS's default locale encoding. This is typically UTF-8 on Linux/macOS, but `cp1252` or similar on Windows. Code that works locally can silently fail or corrupt data in other environments.

Always pass `encoding="utf-8"` (or whatever the file format requires) explicitly.

**Incorrect:**
```python
# Relies on OS default — breaks on Windows or non-UTF-8 systems
with open("data.txt") as f:
    content = f.read()

with open("output.csv", "w") as f:
    f.write("café,prix\n")
```

**Correct:**
```python
with open("data.txt", encoding="utf-8") as f:
    content = f.read()

with open("output.csv", "w", encoding="utf-8") as f:
    f.write("café,prix\n")

# When reading binary, no encoding needed
with open("image.png", "rb") as f:
    data = f.read()
```

**Pathlib equivalent (also requires explicit encoding):**
```python
from pathlib import Path

content = Path("data.txt").read_text(encoding="utf-8")
Path("output.txt").write_text("hello", encoding="utf-8")
```

**Tools:** Ruff `W1514` / `PLW1514` (unspecified-encoding), Pylint `W1514`, flake8-bugbear
