3

.dll 文字列テーブルから utf-8 テストを読みたいと思います。このようなもの

LPWSTR nnW;
LoadStringW(hMod, id, nnW, MAX_PATH);

LPWSTR nnWその後、 を に変換したいと思いstd::wstring nnWstringます。私はこのようにしてみました: LPWSTR nnW; LoadStringW(hMod, id, nnW, MAX_PATH);

const int length = MultiByteToWideChar(CP_UTF8,
                                       0,   // no flags required
                                       (LPCSTR)nnW,
                                       -1,  // automatically determine length
                                       NULL,
                                       0);

std::wstring nnWstring(length, L'\0');

if (!MultiByteToWideChar(CP_UTF8,
                         0,
                         (LPCSTR)nnW,
                         -1,
                         &nnWstring[0],
                         length))

MessageBoxW(NULL, (LPCWSTR)nnWstring.c_str(),  L"wstring", MB_OK | MB_ICONERROR);

その後、MessageBoxW には最初の文字のみが表示されます。

4

2 に答える 2

1

.dll 文字列テーブルから utf-8 テストを読みたいと思います。このようなもの

通常、Windows の文字列テーブルは UTF-16 です。UTF-8 データを 1 つに入れようとしています。UTF-8 データは「拡張」ASCII のように扱われるため、各バイトは 2 バイトに拡張され、その間に 0 バイトが入ります。

おそらく、文字列テーブルに UTF-16 データを直接配置する必要があります。

UTF-8 データをリソースに格納する必要がある場合は、それを RCDATA リソースに配置し、下位レベルのリソース関数を使用してデータを取得できます。次に、UTF-8 から UTF-16 に変換して wstring に格納する必要があります。

于 2013-04-01T23:29:07.583 に答える