I can reproduce the problem with a simple C++ program: int main() { locale::global(locale("")); cout.imbue(locale()); cout << 1000 << endl; } The thousands-separator is not displayed correctly in the locale is fr_FR.UTF8. LANG=fr_FR.UTF8 ./test | hexdump -C 00000000 31 e2 30 30 30 0a |1.000.| 00000006 AFAIS e2 alone is not valid UTF-8. Also see bug #1079630 and #1079855.