2013-07-18 28 views
1

我在轉換爲小寫字母的Unicode字符在VC + + MFC中的問題。我有一個CString Variable.so中的Unicode字符,與英語MakeLower()工作正常,我得到更低但它不能將unicode字符轉換爲小寫字母。我嘗試過STL算法轉換:如何使小寫字母的Unicode字符

std :: string data =「ИИИЛЛЛЛ」; // bulgerian chars

std :: transform(data.begin(),data.end(),data.begin(),:: tolower);

但它無法加載unicode字符,我得到「????」符號代替unicode字符。

你可以請讓我知道是否有一個解決方案的unicode字符。我不喜歡使用boost庫。提前感謝!

+0

'std :: tolower'是字符,不是字節型的,因此不能在非ANSII字符串上執行操作。在這種情況下,你應該考慮使用'boost :: locale'。 – nijansen

+1

@nijansen:他使用C調用':: tolower',而不是C++'std :: tolower '。 – MSalters

+0

@MSalters你是對的,我的壞。 – nijansen

回答

3

如果您的項目使用Unicode字符集(項目屬性),CString::MakeLower()應該工作 - 注意,這將不轉換字符串 的內容,它返回一個新的字符串,見this MSDN article

CString s1(_T("ABC")), s2; 
s2 = s1.MakeLower(); 
ASSERT(s2 == _T("abc")); 

EDIT:CString的:: MakeLower()不改變字符串的contentrs,它也返回到轉換後的字符串

+0

感謝您的回覆,是的我的項目屬性設置爲「使用Unicode字符集」。所以,我不認爲MakeLower()將與Unicode字符一起工作。 – Basawaraj

+0

它確實適合我! (當項目設置爲使用Unicode字符集時,CString應指向支持Unicode的CStringW) - 請參閱[MSDN文章](http://msdn.microsoft.com/zh-cn/library/vstudio/ms174288 .aspx),它說'一個CString對象支持char類型或wchar_t類型。它支持哪一個取決於哪一個符號,MBCS或UNICODE,在編譯時定義的? –

+0

好的,謝謝。找到解決方法。調用CString :: MakeLower()之前的setlocale函數,用於uniocde小寫轉換。如果我將屬性設置爲MBCS,它可能會工作。謝謝 – Basawaraj

0

參考嘗試

std::wstring data = L"ИИИЛЛЛЛ"; // Wide chars 

std::transform(data.begin(), data.end(), data.begin(), std::tolower<wchar_t>); 
+0

嗨MSalters感謝現在我能夠加載Unicode字符,但即使算法無法轉換爲小寫字母集Unicode字符集 – Basawaraj

+1

謝謝大家! 我找到了解決方案,我們需要在調用算法之前先設置Locale;現在可以正常工作:) :: setlocale(LC_ALL,「」); std :: wstring data = L「ИЗПИТВАНЕ」; //寬字符 std :: transform(data.begin(),data.end(),data.begin(),:: towlower); 非常感謝你MSalters :) – Basawaraj

+0

很好的補充,我還發現,只是調用setlocale()甚至修復CString :: MakeLower()與Unicode字符一起工作,無需去STL algorithm.Now MakeLower ()也適用於Unicode字符。 – Basawaraj

相關問題