我遇到一个问题,我有UTF16字符串(std::wstring
)可能有“无效”字符导致我的控制台终端停止打印(参见question)。
我想知道是否有一种快速检查字符串中所有字符并用?
替换任何无效字符的方法。
我知道我可以使用正则表达式在这些方面做一些事情,但很难让它验证所有有效的字符,并且也很慢。有没有,例如我可能使用的字符代码的数字范围,例如26-5466之间的所有字符代码是否有效?
答案 0 :(得分:2)
应该可以使用std::ctype<wchar_t>
来确定字符是否可打印:
std::local loc;
std::replace_if(string.begin(), string.end(),
[&](wchar_t c)->bool { return !std::isprint(c, loc); }, L'?');
答案 1 :(得分:0)
我怀疑你的问题与字符的有效性无关,而是与控制台打印它们的能力有关。
UNICODE对“可打印”的定义并不一定与控制台本身“打印”的有效能力相吻合。
像'''这样的字符是“可打印的”但是 - 例如 - 不在winXP控制台上。