2016-11-18 3 views
1

Ich habe einen CMapStringToString, den ich mit Unicode-Zeichen fülle.CMapStringToString kann Unicode nicht verarbeiten?

m_oMap.SetAt(CString(bstrID), CString(bstrText)); 

bstrText ist ein BSTR Unicode-Zeichen enthalten, die tatsächlich richtig gespeichert (Cyrillic Symbole, japanische Symbole, etc.). An diesem Punkt enthält bstrText z.B. "Калибровка".

Allerdings, wenn ich versuchen, die Symbole der Unicode-Codierung verloren scheint abzurufen:

BOOL b = m_oMap.Lookup((LPCTSTR)key, rValue); // key and value are CString& 

Nach dieser Linie rValue z.B. enthält nur "??????????" anstelle von "Калибровка".

Was passiert hier?

+1

Was * sind * Ihre UNICODE-Einstellungen? – nvoigt

+0

Meine Projekte sind alle auf den Unicode-Zeichensatz eingestellt. – Exa

+0

Können Sie eine [mcve] posten? – nvoigt

Antwort

1

ich eine einfache MFC dialogbasierte Anwendung mit VS2015 erstellt haben, hinzugefügt, um eine String-Ressource IDS_TEST_UNICODE Ihre Unicode-Zeichenfolge enthält, und die folgenden MFC-Code funktioniert gut:

void CTestMfcApp1Dlg::OnBnClickedButtonTest1() 
{ 
    CMapStringToString m; 

    CString value(MAKEINTRESOURCE(IDS_TEST_UNICODE)); 
    m.SetAt(CString(L"MyKey"), value); 

    CString readValue; 
    VERIFY(m.Lookup(L"MyKey", readValue)); 
    VERIFY(readValue == value); 
} 

wie Sie aus dem Screenshot beachten Sie, unten.

Kann es nur möglich sein, dass CMapStringToString auch in Ihrem Fall funktioniert gut, und stattdessen sind Sie Probleme nur Visualisierung der Inhalt der Wertzeichenfolge abgerufen aus der Karte zu haben?

Screenshot

+0

'CString Wert ((LPCTSTR) IDS_TEST_UNICODE);' sollte das [MAKEINTRESOURCE Makro] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648029.aspx) stattdessen (ich weiß, die [CString] (https://msdn.microsoft.com/en-us/library/5bzxfsea.aspx) Dokumentation verwendet die gleiche Besetzung, aber es gibt keinen Grund, dies zu wiederholen). Nebenbei können Sie auch _CSTRING_DISABLE_NARROW_WIDE_CONVERSION definieren, um unbeabsichtigte Unicode ↔ ANSI-Konvertierungen zu deaktivieren. – IInspectable

+0

Vielen Dank für die zusätzlichen Informationen. Ich akzeptiere dies als Lösung und weise darauf hin, dass es in meiner Lösung ein referenziertes Projekt gab, das zur Unterstützung von Unicode noch nicht geändert wurde. – Exa

Verwandte Themen