64,654
社区成员
发帖
与我相关
我的任务
分享
QString fileName = QFileDialog::getOpenFileName(this,tr("Open RDF DB"),".",tr("RDF DB files (*.rdf)"));//此处就是通过对话框得到文件路径
std::wstring x = rdfFileName.toStdWString(); //跟踪进来的时候此处是正常的值
std::string xx = WString2String(x); //而此处的值就不是正常的值了,路径中的中文全部变成了乱码
//我后面还要调用别人写好的一个接口去打开这个文件,而别人给我的接口中,参数是const char*
//我如果用x.c_str()要报错,不能从const w_char* 到const char*。
//而用xx.c_str(),更不行了啊
void W2C(const wchar_t *pw , char *pc)
{
*pc++ = (*pw)& 0xFF;
*pc = (*pw)>>8;
}
#include <iostream>
using namespace std;
void W2C(const wchar_t *pw , char *pc)
{
*pc++=*pw>>8;
*pc=*pw;
}
char *wstr2cstr(const wchar_t *pwstr , char *pcstr)
{
char *ptemp = pcstr ;
if(pwstr!=NULL && pcstr!=NULL)
{
size_t wstr_len = wcslen(pwstr) ;
while( wstr_len -- > 0)
{
W2C(pwstr , pcstr);
pwstr++ ;
pcstr +=2 ;
}
*pcstr = '\0';
return ptemp ;
}
return 0 ;
}
int main(int arg , char *argv[])
{
const wchar_t *pwstr = L"这里是中文";
int wsize = wcslen(pwstr);
char *pcstr = (char *)new char[2*wsize+1] ;
memset(pcstr, 0, 2*wsize+1 );
wstr2cstr(pwstr,pcstr) ;
cout<<pcstr<<endl;
delete []pcstr ;
}