Sujet : Re: locale/LC_CTYPE vs strcasecmp?
De : naddy (at) *nospam* mips.inka.de (Christian Weisgerber)
Groupes : comp.unix.bsd.freebsd.miscDate : 26. Mar 2024, 21:47:03
Autres entêtes
Message-ID : <slrnv069hn.tsn.naddy@lorvorc.mips.inka.de>
References : 1
User-Agent : slrn/1.0.3 (FreeBSD)
On 2024-03-26, Winston <
wbe@UBEBLOCK.psr.com.invalid> wrote:
The man page says strcasecmp_l() takes an explicit locale.
The implication is that strcasecmp() uses the current locale
(presumably as set by setlocale()).
Yes.
src/lib/libc/string/strcasecmp.c:
57 int
58 strcasecmp(const char *s1, const char *s2)
59 {
60 return strcasecmp_l(s1, s2, __get_locale());
61 }
After calling setlocale(LC_ALL, "uk_UA.UTF-8"), I'm seeing that
strcasecmp() is not, in fact, case-independently matching non-ASCII
UTF-8 strings: it's case sensitive (the ASCII equivalent in this
case being that "Abc" isn't matching "abc").
UTF-8 characters are multibyte. You need to convert the strings
to wide characters and use wcscasecmp().
-- Christian "naddy" Weisgerber naddy@mips.inka.de