我有一個問題,我有UTF16字符串(std::wstring
)可能有「無效」的字符,這導致我的控制檯終端停止打印(見question)。檢查UTF16字符串中的所有字符是否有效?
我不知道是否有檢查字符串中的所有字符,並與?
更換任何無效字符的快捷方式。
我知道我可以做沿着這些線路用正則表達式的東西,但它是很難讓它驗證所有有效字符,並且也慢。是否有我可能使用的char代碼的數字範圍26-5466之間的所有字符代碼是否有效?
我有一個問題,我有UTF16字符串(std::wstring
)可能有「無效」的字符,這導致我的控制檯終端停止打印(見question)。檢查UTF16字符串中的所有字符是否有效?
我不知道是否有檢查字符串中的所有字符,並與?
更換任何無效字符的快捷方式。
我知道我可以做沿着這些線路用正則表達式的東西,但它是很難讓它驗證所有有效字符,並且也慢。是否有我可能使用的char代碼的數字範圍26-5466之間的所有字符代碼是否有效?
應該可以使用std::ctype<wchar_t>
確定字符是否可打印:
std::local loc;
std::replace_if(string.begin(), string.end(),
[&](wchar_t c)->bool { return !std::isprint(c, loc); }, L'?');
我懷疑你的問題是不相關的字符的有效性,但到控制檯的能力來打印文檔。
定義UNICODE確實爲「打印」的並不一定一致,從而將控制檯本身「打印」的有效能力。
字符,如「€」是「打印」,而是 - 因爲沒有例 - 在WinXP控制檯。