[reportlab-users] pdfgen creates corrupted pdf files

Robin Becker robin at reportlab.com
Wed Dec 8 11:02:28 EST 2004

The 2.3 manual says this

"""Extension modules should never call setlocale(), except to find out what the 
current locale is. But since the return value can only be used portably to 
restore it, that is not very useful (except perhaps to find out whether or not 
the locale is "C").

When Python is embedded in an application, if the application sets the locale to 
something specific before initializing Python, that is generally okay, and 
Python will use whatever locale is set, except that the LC_NUMERIC locale should 
always be "C".

The setlocale() function in the locale module gives the Python programmer the 
impression that you can manipulate the LC_NUMERIC locale setting, but this not 
the case at the C level: C code will always find that the LC_NUMERIC locale 
setting is "C". This is because too much would break when the decimal point 
character is set to something else than a period (e.g. the Python parser would 
break). Caveat: threads that run without holding Python's global interpreter 
lock may occasionally find that the numeric locale setting differs; this is 
because the only portable way to implement this feature is to set the numeric 
locale settings to what the user requests, extract the relevant characteristics, 
and then restore the "C" numeric locale.

When Python code uses the locale module to change the locale, this also affects 
the embedding application. If the embedding application doesn't want this to 
happen, it should remove the _locale extension module (which does all the work) 
from the table of built-in modules in the config.c file, and make sure that the 
_locale module is not accessible as a shared library."""

Robin Becker

More information about the reportlab-users mailing list