C и C ++ определяют char
как байт, т. Е. Целочисленный тип, для которого sizeof
возвращает 1. Это не должно быть 8 бит, но в подавляющем большинстве случаев это так. ИМХО, это должно было быть с именем byte
. Но в 1972 году, когда был создан C, западным пользователям не приходилось иметь дело с многобайтовыми кодировками символов, так что вы могли избежать смешения типов «символов» и «байтов».
Вы просто должны жить с запутанной терминологией. Или typedef
это прочь. Но не редактируйте файлы заголовков вашей системы. Если вы хотите использовать символьный тип вместо байтового типа, используйте wchar_t
.
Но строка UTF-8 состоит из 8-битных кодовых единиц, поэтому char
будет работать просто отлично. Вы просто должны помнить разницу между char
и характером. Например, не делайте этого:
void make_upper_case(char* pstr)
{
while (*pstr != '\0')
{
*pstr = toupper(*pstr);
pstr++;
}
}
toupper('a')
работает как положено, но toupper('\xC3')
- бессмысленная попытка прописной половины символа.