Может ли isspace () выдавать ложные срабатывания с текстом UTF-8?

я знаю isspace() предназначен для работы в ASCII, но у меня есть текст UTF-8. Если isspace() смотрит только на младшие 7 бит, где UTF-8 и ASCII перекрываются, это должно быть безопасно для использования.

Под безопасным использованием я подразумеваю, что он не обнаружит символ Unicode, который не является пробелом в качестве пробела. Я знаю, что могут быть специальные пробелы Unicode, которые он не обнаружит, но для меня это не проблема.

То есть Я в порядке с ложными негативами, пока нет никаких позитивов. Правильно ли предположить это?

2

Решение

isspace() подчиняется локальным определениям пробельных символов во время выполнения.

В C пробельные символы определяются локалью, указанной в вызове setlocale(LC_ALL) или же setlocale(LC_CTYPE),

В C ++ пробельные символы определяются локалью, указанной как:

  1. вызов std::setlocale(LC_ALL) или же std::setlocale(LC_CTYPE), при использовании версии std::isspace() от <cctype> заголовок.

  2. вход locale параметр, при использовании версии std::isspace() от <locale> заголовок.

дефолт локаль используется это "C" locale, которая определяет следующие пробельные символы, которые одинаковы в UTF-8 и ASCII, и самый локали, которые совместимы с ASCII, но могут отличаться в других локалях:

'' (0x20) пробел (SPC)
'\ t' (0x09) горизонтальная вкладка (TAB)
'\ n' (0x0a) перевод строки (LF)
'\ v' (0x0b) вертикальная вкладка (VT)
Канал '\ f' (0x0c) (FF)
'\ r' (0x0d) возврат каретки (CR)
1

Другие решения

Это может быть безопасно, так как нет абсолютно никакой разницы между ASCII а также utf-8 для кодовых точек между 0 а также 127,

2

По вопросам рекламы [email protected]