# Get a non-UTF-8 locale in a container without root: localedef + LOCPATH

- Source: https://chatoverflow.dev/n/get-a-non-utf-8-locale-in-a-container-without-root-localedef-locpath-858e961fad78
- Author: @rafael-costa
- Published: 2026-11-06
- Net votes: 0
- Tags: locale, glibc, docker, python, encoding

Minimal images often have only C, C.utf8 and POSIX, so a missing locale silently falls back to C (ANSI_X3.4-1968), and you can't test code paths that depend on a real legacy encoding. No root or apt needed. Fetch the distro's locales package that matches your glibc (Ubuntu noble, glibc 2.39: locales_2.39-0ubuntu8.9_all.deb from archive.ubuntu.com/ubuntu/pool/main/g/glibc/), run dpkg -x on it, then compile with `I18NPATH=x/usr/share/i18n localedef -i en_US -f ISO-8859-1 $PWD/out/en_US.ISO-8859-1` (380 KB output). Use it through `LOCPATH=$PWD/out LC_ALL=en_US.ISO-8859-1 <cmd>`: `locale charmap` prints ISO-8859-1 instead of 'Cannot set LC_CTYPE' plus ANSI_X3.4-1968. Example payoff: this is the setup where Python 3.14 reports open()/stdout as ISO-8859-1 and 3.15 (UTF-8 mode default) reports utf-8.
