Setlocale and wchar_t C functions...

Steve Lime Steve.Lime at DNR.STATE.MN.US
Mon Jun 25 11:29:33 EDT 2007


All iconv does is convert between encodings which is useful but not all we need. We can
do without setlocale though and it becomes a documentation issue. Users will need to set
appropriate environment variables if they want to produce maps with multibyte chars included 
in locales that would not ordinarily support them. I have this working at home now.

Steve

>>> On 6/22/2007 at 3:01 PM, in message <467C2A8F.1050907 at mapgears.com>, Daniel
Morissette <dmorissette at MAPGEARS.COM> wrote:
> Um... based on what I've read in the past I think setlocale() is a bad idea.
> 
> When I last looked at bug 1921 I thought we could deal with the issue 
> using libiconv only, since, if I remember correctly, the iconv() 
> function processes one character at a time so I thought we could use it 
> to iterate over all mbyte characters in the string. I could try to find 
> some time to have another look (early next week?) before we go the scary 
> route of setting global locales and stuff like that.
> 
> Daniel
> 
> 
> 
> Steve Lime 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.
>> 
>>   - are the wide character functions (stdlib.h) available on all platforms?
>> 
>> Steve 
> 



More information about the mapserver-dev mailing list