2012-02-10 143 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控制檯。

相關問題