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