String functions

Most case-insensitive string functions use toupper and tolower, which don't support non-ASCII characters.