3

を使用してコンソールのタイトルを Unicode 文字を含む文字列に設定しようとすると、SetConsoleTitle()代わりにいくつかの文字化けした文字が表示されます。
SetConsoleTitleW() 関数も試しましたが、次のエラーが表示されます。

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

何かアドバイス?

4

2 に答える 2

7

ワイド文字列リテラルを使用する必要があります。つまり、次のようになります。

SetConsoleTitleW(L"DиD");

引用符のL前の、は、これがwchar_t*文字列であることを示します。

また、完全を期すために、C ++ 11には、新しい文字列リテラルプレフィックスが定義されていることを言わなければなりません。

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.";

いつものように、ウィキペディアにはそれについてのより詳細なメモがあります。

于 2012-04-14T11:11:37.760 に答える
1

UTF-16でエンコードされたデータを期待する関数にUTF-8でエンコードされたデータを送信しようとしているように見えます。

WCHAR*文字列リテラルを関数に渡す前にUTF-16(つまり)に変換するか、リテラルをリテラルとして作成する必要がありますWCHAR*(これは構文を使用して行われると思いますL"DиD")。

于 2012-04-14T11:14:20.787 に答える