std::string
знает только о необработанных char
значениях, он ничего не знает о конкретных кодировках символов, которые используют char
для хранения закодированных значений.
Многие распространенные реализации UTF-8 используют char
для хранениякодированные блоки кода (хотя C ++ 20 вместо этого введет char8_t
и std::u8string
для этой цели). Но другие кодировки символов (Windows-12 ##, ISO-8859- # и т. Д.) Также могут помещать свои закодированные значения в элементы char
.
Любое значение char
, попадающее в диапазон ASCII(0x00 .. 0x7F) поместится в 1 char
и отобразится на то же значение кодовой точки в Unicode (U + 0000 .. U + 007F), но на любое значение char
в диапазоне ANSI, но не в диапазоне ASCII (0x80 .. 0xFF) подлежит интерпретации любой кодировкой символов, создавшей значения char
. Некоторые кодировки используют 1 char
на символ, другие используют несколько char
s.
Так что да, есть такая вещь, как "не-UTF-8 char".