2012-04-14 7 views
3

Wenn ich versuche, den Titel meiner Konsole auf einen String mit Unicode-Zeichen zu setzen, der SetConsoleTitle() verwendet, zeigt der Titel stattdessen nur einige fehlerhafte Zeichen an.
Ich habe auch versucht, die SetConsoleTitleW() Funktion, aber das gibt mir die folgende Fehlermeldung:C++: Unicode Konsole Titel ..?

error: cannot convert 'const char*' to 'const WCHAR*' for argument '1' to 'BOOL SetConsoleTitleW(const WCHAR*)' 

Irgendwelche Tipps?

Antwort

7

Sie haben breiten Stringliteral zu verwenden, das heißt:

SetConsoleTitleW(L"DиD"); 

Die L, bevor ein Zitat zeigt, dass dies ein wchar_t* String.

Auch für Vollständigkeit Ich muss sagen, dass in C++ 11 gibt es neue Stringliteral Präfixe definiert:

const char a[] = u8"for a UTF-8 string."; 
const char_16_t b[] = u"for a UTF-16 string."; 
const char_32_t c[] = U"for a UTF-32 string."; 

wie üblich wikipedia detailliertere Kenntnis darüber hat.

+0

Vielen Dank. Sehr gute Antwort. (Ich werde diese Antwort in 2 Minuten akzeptieren, wenn das Zeitlimit weg ist.) –

+1

Gern geschehen! –

1

Es sieht so aus, als ob Sie versuchen, UTF-8-codierte Daten an eine Funktion zu senden, die UTF-16-codierte Daten erwartet.

Sie müssen entweder die Stringliteral auf UTF-16 (das heißt WCHAR*) umwandeln, bevor es an die Funktion übergeben, oder erstellen Sie die wörtliche als WCHAR* wörtliche (was ich glaube ist mit der Syntax getan L"DиD").