Interesting question from inside the firewall:

I expected Char.IsLetter() to return true only if presented with 'A'..'Z' or 'a'..'z' in my current (US English) locale. I find that I also get true returned for alphabetic characters above the ANSI range, such as Chinese character.


Is this because that we are using Unicode 3.0 in here? Where can I find Unicode 3.0 spec?


By the way is there a method which can return true only if presented with 'A'..'Z' or 'a'..'z'?


And the answer, from a developer on the globalization team:

It is indeed using Unicode properties (updated for Unicode 3.2 in future release and then to 4.0 after that eventually). Info on Unicode character props can be found in the Unicode Character Database at


If you need to get just ASCII then you can look for (Char.IsLetter(c) && c <= 0x007a).