In the section covering setlocale, the ANSI C standard states in a footnote that the only ctype.h functions whose behaviour is not affected by the current locale are isdigit
The required character set is defined in section 2.2.1. Section 2.2.1.2 then goes on to describe the behavior of extension characters:
Microsoft always has its own interpretation of the spec. And usually the sentence “but Microsoft is wrong” does not carry any weight with your CEO, so you have to code around MS bugs/interpretations.
The amount of code to support incorrect behavior of IE and Outlook is staggering.
In many cases, the only solution is to roll your own version of the function that does the right thing and do something like this:
int my_isdigit( int c )
{
#ifdef WIN32
your implementation goes here
#else
return isdigit( c );
#endif
}