2

サーバーからJSON文字列を取得します。そのタイプは次のstd::wstringとおりです。その内容は次のとおりです。

[{
    "nodeRef": "workspace://SpacesStore/12f1623f-196a-4289-a9af-07f3d1ee7c4e",
    "name": "/Oracle® Fusion Developer's Guide for Oracle Application Development Framework b31974.txt",
    "type": "cm:content",
    "sys:node-dbid": "228,137",
    "cm:modified": "2013-09-23 13:51:33.682 +0800",
    "size": "260",
    "checksum": "4D59ABBC6A45BE32750CAF541EED29C4"
}]

std::string文字列を扱うためにrapidjsonを使用するために変換しようとしましたが、「®」が「?」に変わるため、「®」の変換に失敗しました。以下の方法を試してみましたが、どれも成功しませんでした:

//method 1
return (char *)(_bstr_t)wstr.c_str();

//method 2
const wchar_t* wp = wstr.c_str();
int len= WideCharToMultiByte(CP_ACP,0,wp,-1,NULL,0,NULL,NULL);  
char * m_char=new char[len];  
WideCharToMultiByte(CP_ACP,0,wp,-1,m_char,len,NULL,NULL);  
m_char[len-1]='\0'; 

std::string strTemp(m_char);
delete [] m_char;
return strTemp; 


//method 3
std::string curLocale = setlocale(LC_ALL, NULL);       
setlocale(LC_ALL, "en-us");
const wchar_t* _Source = wstr.c_str();
size_t _Dsize = 2 * wstr.size() + 1;
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
std::string result = _Dest;
delete []_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;

どうしてか分かりません!誰でも助けることができますか?ありがとう!

私のロケールは最初は「中国語 (簡体字)_People's Republic of China.936」で、「en-us」に変更して方法 2 を使用すると、結果は OK です。「®」はそのままです。しかし、ここにあるコンピュータのほとんどはデフォルトで「chs」です。システム言語を変更しない別の解決策はありますか?

4

0 に答える 0