Итак, у меня есть эта функция в большой кодовой базе, которая проверяет наличие недопустимых символов, которые выглядят примерно так:
validateMe(std::string myString)
{
for (int i = 0; i < myString.length(); i++)
{
if ((myString[i] == 0x7E) || ...)
{
return NOT_VALID_STRING;
}
}
return VALID_STRING;
}
перед вызовом validateMe, строка была преобразована в UTF8.
Теперь Это работало нормально, пока не было проверено на китайские иероглифы.
Я прохожу через http://utf8everywhere.org/, пытаюсь лучше понять все, но это как глубокая ядовитая дыра, в которую я попадаю.
Я думаю, я Я должен как-то найти кодовые точки, проверить, находится ли каждый в допустимом диапазоне, где находятся недопустимые символы, и если да, то я могу искать недопустимые символы. Но как мне найти кодовые точки?
Я читал, что std :: string может справиться с этим, но
myString.find("~") != std::string::npos
не удается с китайскими символами, я думаю, потому что первые куски китайского иероглифа 0x7E. По крайней мере те, которые я пробовал.
Итак, как проверить наличие недопустимых символов в строке, которая может быть написана на китайском языке? Предположим, что китайский EU C -CN.
EDIT:
validateMe ("testme") должен пройти
validateMe ("test ~ me") НЕ должен пройти
когда пользователь вводит символы «啊 是 的 发» (то есть первый символ для каждой буквы в «asdf» на китайском языке EU C -CN) через GUI, функция завершается ошибкой , На самом деле он находит "~" или 0x7E. Отладчик VS действительно переводит ввод как å • Šæ˜¯çš „å ', который имеет' ~ '.