检查UTF16字符串中的所有字符是否有效



我遇到一个问题,因为我的UTF16字符串(std::wstring)可能包含"无效"字符,导致控制台终端停止打印(请参阅问题)。

我想知道是否有一种快速的方法可以检查字符串中的所有字符,并用?替换任何无效字符。

我知道我可以用正则表达式做一些类似的事情,但很难让它验证所有有效的字符,而且速度也很慢。我可能使用的字符代码是否有一个数字范围,例如26-5466之间的所有字符代码都有效?

应该可以使用std::ctype<wchar_t>来确定字符是否可打印:

std::local loc;
std::replace_if(string.begin(), string.end(),
                [&](wchar_t c)->bool { return !std::isprint(c, loc); }, L'?');

我怀疑您的问题与字符的有效性无关,而是与控制台打印字符的能力有关。

UNICODE对"可打印"的定义并不一定与控制台本身"打印"的有效能力一致。

像"€"这样的字符是"可打印的",但例如,不能在winXP控制台上打印。

最新更新