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

时间:2012-02-10 09:20:31

标签: c++ string utf-16

我遇到一个问题,我有UTF16字符串(std::wstring)可能有“无效”字符导致我的控制台终端停止打印(参见question)。

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

我知道我可以使用正则表达式在这些方面做一些事情,但很难让它验证所有有效的字符,并且也很慢。有没有,例如我可能使用的字符代码的数字范围,例如26-5466之间的所有字符代码是否有效?

2 个答案:

答案 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控制台上。