1

このコードは期待どおりに機能せず、何が問題なのかわかりません。

szTeam は変更する必要がありますが、変更しません。

誰でもこれを説明できますか?

-----------------------------------------------------

WCHAR   szTeam[MAX_PATH] = L"\u7F57\u5207\u8FBE\u5C14\u6D41\u6D6A";
char    szMsg[MAX_PATH];

sprintf(szMsg , "%s"  , WideStringToMultiByte(szTeam));
swprintf( szTeam , L"%s" , MultiByteToWideString(szMsg));

......

WCHAR* MultiByteToWideString(const char* szSrc)
{
    int iSizeOfStr = MultiByteToWideChar(CP_ACP, 0, szSrc, -1, NULL, 0);  
    wchar_t* wszTgt = new wchar_t[iSizeOfStr];  
    if(!wszTgt)
        return (NULL);  
    MultiByteToWideChar(CP_ACP, 0, szSrc, -1, wszTgt, iSizeOfStr);
    return(wszTgt);
}

char* WideStringToMultiByte(const wchar_t* wszSrc)  
{  
    int iSizeOfStr = WideCharToMultiByte(CP_UTF8, 0, wszSrc, -1, NULL, 0, NULL, NULL);  
    char* szTgt = new char[iSizeOfStr];  
    if(!szTgt)
        return(NULL);  
    WideCharToMultiByte(CP_UTF8, 0, wszSrc, -1, szTgt, iSizeOfStr, NULL, NULL);  
    return szTgt;    
} 

-----------------------------------------------------
4

1 に答える 1

0

ええと、szTeam変わりません。認識できないものに、モジバケ。「罗切达尔流浪」から始めて、utf-16 エンコーディングから utf-8 に変換します。それはうまくいきます。デバッガーは、szMsg が utf-8 でエンコードされていることを認識も気にもしないため、認識できるものは何も表示しません。

あなたは間違っていますが、その utf-8 文字列を CP_ACP で変換しています。これは、文字列がデフォルトのシステム コード ページでエンコードされていることを示しています。そうではありません。utf-8 でエンコードされています。

あなたの問題を解決してください:

WCHAR* MultiByteToWideString(const char* szSrc)
{
    int iSizeOfStr = MultiByteToWideChar(CP_UTF8, 0, szSrc, -1, NULL, 0);  
    // etc..
}

そして、文字列が適切に変換されたため、szTeamは変更されません。

于 2012-08-18T11:10:02.573 に答える