A data file that opens fine on a teammate's laptop crashes on yours. Two shapes:
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position ... while
reading, or FileNotFoundError / OSError: [Errno 22] Invalid argument even though
you can see the file right there in the folder. A third cousin: SyntaxWarning: invalid escape sequence '\U' from a Windows path pasted into code.
Windows laptops reading real-world data files: CSV or JSON exports containing Hindi
or regional-language text, the rupee sign, or curly quotes. The file was created on
Linux, a Mac, or a web service (all UTF-8); Windows open() historically defaults to
a legacy encoding like cp1252, so the same bytes decode differently per machine.
Path errors come from copying C:\Users\rohan\data.json straight into a Python
string, where \U and \n are escape codes, not letters. Linked module: 0.3
(Python that AI actually uses).
Decide which of the two independent problems you have. If the error is
UnicodeDecodeError, the file WAS found — the failure is in decoding bytes to text,
so the path is fine and the encoding is wrong. The word 'charmap' or 'cp1252' in
the message is the giveaway that Windows applied its legacy default instead of UTF-8.
If the error is FileNotFoundError, print your true location first:
import os; print(os.getcwd()) — scripts run from whatever folder the terminal is
in, not from where the file sits in VS Code's sidebar. If the path contains
backslashes typed inside a normal string, Python may have mangled it before the
operating system ever saw it — the invalid-escape warning confirms this.
Encoding case: pass the encoding explicitly — open(path, encoding="utf-8") for
every text file you read or write, which makes the code behave identically on
Windows, macOS, and Linux. If a legacy file truly is not UTF-8, ask its producer or
try encoding="utf-8-sig" (Excel exports) before anything exotic. Path case: run
the terminal from the project folder (cd there first), use relative paths like
data/orders.json with forward slashes — Windows accepts them from Python — or use
a raw string r"C:\Users\rohan\data.json" when an absolute Windows path is
unavoidable. Then rerun and confirm with a one-line read test before running the
full script.
Type encoding="utf-8" in every open() as a reflex — the habit is free and removes
a whole class of "works on my machine". Keep data files inside the project folder and
refer to them relatively, so the script travels between machines and operating
systems unchanged. Always start the terminal in the project root before running
scripts. When sharing data with teammates on mixed laptops, agree once: all text
files are UTF-8, full stop.
Q: "Your script reads a CSV fine on Ubuntu but throws UnicodeDecodeError on a
colleague's Windows laptop. Why, and what is the fix?" Strong answer: name the
platform-dependent default encoding of open(), note that 'charmap' in the message
identifies the Windows legacy codec, give the explicit encoding="utf-8" fix, and
add the professional rule — never rely on platform defaults for anything that must
run on two machines. Distinguishing decode errors (file found, bytes wrong) from
path errors (file never found) marks you as someone who reads tracebacks properly.