请回答
http://expert.csdn.net/Expert/topic/1690/1690245.xml?temp=.3285944
这个问题.
并且请不要这里回答
这里留做为能提供有帮助回复者送分表示感谢.
原问题
----------------------------------------------------------
我使用VC读取SQL Server中NCHAR字段,
这个字段中存放了unicode类型的字符串
可是我不能定义_UNICODE,因为我使用ISAPI
ISAPI不支持unicode
我如何做才能把读到的数据转换成unicode的字符串并输出?
(使用MBCS会乱码)
m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
_variant_t vName;
int i=0;
while(!m_pRecordset->adoEOF)
{
i++;
vName = m_pRecordset->GetCollect("name");
*pCtxt << _T((_bstr_t)vName )
...
}
谢谢.
void CNchartestExtension::Default(CHttpServerContext* pCtxt)
{
*pCtxt<<"<html><head>\n";
*pCtxt<<"<meta HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=UTF-8\">";
*pCtxt<<"</head><body>";
char mybuf[10240];
try
{
_ConnectionPtr pConn("ADODB.Connection");
_RecordsetPtr pRst("ADODB.Recordset");
pConn->Open("Provider=SQLOLEDB; Data Source=192.168.0.2,1433; Network Library=DBMSSOCN; Initial Catalog=TestDB;User ID=masterz;Password=sa;",
"", "", adConnectUnspecified);
// Note 1.
pRst->Open(
"Table1",
_variant_t((IDispatch *) pConn, true),
adOpenStatic,
adLockReadOnly,
adCmdTable);
pRst->MoveFirst();
while(pRst->EndOfFile==VARIANT_FALSE)
{
_bstr_t bstrvalue = (_bstr_t) pRst->Fields->Item["nchardata"]->Value;
char* buf=(new char[bstrvalue.length()*3]);
ZeroMemory(buf,bstrvalue.length()*3);
int nret=WideCharToMultiByte(CP_UTF8,0,(LPCWSTR)bstrvalue,bstrvalue.length(),buf,bstrvalue.length()*3,NULL,
FALSE);
//*pCtxt << "nchar field data:"<<(char*) ((_bstr_t) pRst->Fields->Item["nchardata"]->Value);
*pCtxt<<buf;
*pCtxt<<"<BR>";
pRst->MoveNext();
delete[] buf;
}
pRst->Close();
pConn->Close();
}
catch (_com_error &e)
{
sprintf(mybuf,"Description = %s\n", (char*) e.Description());
*pCtxt <<mybuf;
}
EndContent(pCtxt);
}