Setlocale and wchar_t C functions...

Steve Lime Steve.Lime at DNR.STATE.MN.US
Fri Jun 22 12:38:34 EDT 2007


Great, thanks for the clarification.

Steve

>>> On 6/22/2007 at 10:55 AM, in message
<75b4b93e0706220855k7b2d7797gb608527da8a11d0d at mail.gmail.com>, "Umberto
Nicoletti" <umberto.nicoletti at gmail.com> wrote:
> On 6/22/07, Steve Lime <Steve.Lime at dnr.state.mn.us> wrote:
>> Hi all: I'm working to resolve bug 1921 with deals with curved labels and 
> multibyte character sets. The current label path
>> code doesn't handle multibyte character sets. Fortunately standard C (on 
> Linux and MacOS anyway) have some functions
>> to deal with the problem. For example mbstowcs converts from a multibyte 
> string to a wide character string. The behavior
>> of those functions depend on the locale. Unless you are in a local with 
> multibyte characters those functions don't work
>> with multibyte chars and assume single byte chars. Found that out trying to 
> draw Chinese characters with the default US-EN
>> locale. If I set the local to one with multibyte characters then I could 
> debug.
>>
>> A couple of questions then:
>>
>>   - what would folks think about adding a LOCALE parameter to the main 
> mapObj? We could to a setlocale(LC_ALL, msyytext)
>> immediately. If not set, then whatever the system has set takes over.
>>
>>   - as I understand it setlocale has a global effect so perhaps there might 
> be some down stream side effects, although I can't
>> think what they might be. I suppose for long running processes there could 
> be issues. I can see where a company might want
>> to provide maps in different languages from the same server.
> 
> Steve,
> calling setlocale from mapserver will also change the locale of the
> mapscript language which means, for Java, a global change of the
> locale behaviour in the application server which is, I believe, not a
> really good idea. The same happens with python, c#, etc and PHP
> mapscript loaded as shared module will change the locale of apache.
> I also seem to remember that calls to setlocale are not thread safe.
> 
> A similar question was raised some time ago and at that time it was
> somehow decided not to call setlocale from within mapserver.
> See the thread titled: 'Proposing to call setlocale( LC_ALL, "C" ) in 
> msSetup()'
> 
> To set the locale for a process one should use the usual environment
> variables (LANG or LC_ALL). In particular it is possible to do this on
> a per-map basis for the CGI version of mapserver either from whithin
> apache or with a wrapper shell script.
> 
> Regards,
> Umberto
> 
> 
>>
>>   - are the wide character functions (stdlib.h) available on all platforms?
>>
>> Steve
>>



More information about the mapserver-dev mailing list