2012-02-10 146 views
1

我有一个问题,我有UTF16字符串(std::wstring)可能有“无效”的字符,这导致我的控制台终端停止打印(见question)。检查UTF16字符串中的所有字符是否有效?

我不知道是否有检查字符串中的所有字符,并与?更换任何无效字符的快捷方式。

我知道我可以做沿着这些线路用正则表达式的东西,但它是很难让它验证所有有效字符,并且也慢。是否有我可能使用的char代码的数字范围26-5466之间的所有字符代码是否有效?

回答

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'?'); 
0

我怀疑你的问题是不相关的字符的有效性,但到控制台的能力来打印文档。

定义UNICODE确实为“打印”的并不一定一致,从而将控制台本身“打印”的有效能力。

字符,如“€”是“打印”,而是 - 因为没有例 - 在WinXP控制台。

相关问题