2012-02-10 14 views
1

コンソール端末が印刷を停止する原因となる「無効な」文字を持つUTF16文字列(std::wstring)があるという問題があります(question参照)。UTF16文字列内のすべての文字が有効であることを確認しますか?

文字列内のすべての文字を確認し、無効な文字を?に置き換える方法があるのだろうかと思います。

私は正規表現でこれらの行に沿って何かできることは知っていますが、すべての有効な文字を検証するのが難しく、遅くなることもあります。例えばありますか?私が使用するかもしれないcharコードの数値範囲。 26-5466の間のすべてのcharコードは有効ですか?

答えて

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コンソールでは表示されません。

関連する問題