This sounds like a bug of the operating system.
On Fedora 33:
$ env LC_ALL=C.UTF-8 locale
LANG=en_US.UTF-8
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
$ env LC_ALL=C.UTF-8 locale charmap
UTF-8
On debian:buster-slim
in Docker (podman actually):
# env LC_ALL=C.UTF-8 locale
LANG=
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
# env LC_ALL=C.UTF-8 locale charmap
UTF-8
On Ubuntu 20.04:
# env LC_ALL=C.UTF-8 locale
LANG=
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
# env LC_ALL=C.UTF-8 locale charmap
UTF-8
Which seems much more sensible.
Maybe the C.UTF-8 "locale" is not generated on the system you tested?
BTW I noticed C.UTF-8 is available in Debian & Ubuntu in Docker, but en_US.UTF-8
is not by default, it warns with:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
FWIW TruffleRuby has some docs on how to properly set a en_US.UTF-8
locale on various OS: https://github.com/oracle/truffleruby/blob/master/doc/user/utf8-locale.md (seems one of the most frequent issues when using Docker)