CMarkup xml;
xml.SetDoc(_T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"));
xml.AddElem(_T("UserInfo.xml"));
xml.IntoElem();
xml.AddElem((CString)_T("姓名"),(CString)m_strEdit[0]);
xml.AddElem(_T("性别"),(CString)m_strEdit[1]);
xml.AddElem(_T("年龄"),(CString)m_strEdit[2]);
xml.AddElem(_T("病历号"),(CString)m_strEdit[3]);
xml.AddElem(_T("检查号"),(CString)m_strEdit[4]);
xml.AddElem(_T("检查项目"),(CString)m_strEdit[5]);
xml.AddElem(_T("检查日期"),(CString)m_strEdit[6]);
xml.AddElem(_T("检查科室"),(CString)m_strEdit[7]);
xml.OutOfElem();
xml.Save(_T("UserInfo.xml"));
创建XML文件后获取m_strEdit里的内容可以显示出来
但是如姓名,性别这些都是乱码,请问怎么回事
显示出来是如下
<?xml version="1.0" encoding="UTF-8"?>
<UserInfo.xml>
<濮撳悕>asd</濮撳悕>
<鎬у埆>sd</鎬у埆>
<骞撮緞/>
<鐥呭巻鍙?>
<妫?鏌ュ彿/>
<妫?鏌ラ」鐩?sdsd</妫?鏌ラ」鐩?
<妫?鏌ユ棩鏈?>
<妫?鏌ョ?瀹?>
</UserInfo.xml>
请高手指点一二,谢谢
------解决方案--------------------------------------------------------
是编码的问题。。CMarkup所给的示例工程在保存时若定义了UNICODE,就将UINCODE转换多字节。
下面是我改动后的打开文件和保存文件的版本,,只支持UNICODE版本的XML的打开和写入。
//虚函数
BOOL CMarkupDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
// Load up buffer
unsigned char* pBuffer = NULL;
int nFileLen = 0;
//只支持unicode
try
{
CFile file( lpszPathName, CFile::modeRead );
nFileLen = file.GetLength();
// Allocate Buffer for Ansi file data
pBuffer = new unsigned char[nFileLen +2];
nFileLen = file.Read( pBuffer, nFileLen );
file.Close();
pBuffer[nFileLen] = 0;
pBuffer[nFileLen+1]=0;//00-->\0----->A null-terminated string
}
catch (CFileException*)
{
if ( pBuffer )
delete pBuffer;
return FALSE;
}
/*
#if defined(_UNICODE)
// Convert file to UNICODE if necessary
int nWideSize = MultiByteToWideChar(CP_UTF8,0,(const char*)pBuffer,nFileLen,m_csText.GetBuffer(nFileLen),nFileLen);
m_csText.ReleaseBuffer(nWideSize);
#else* /*/
m_csText = (TCHAR*)pBuffer;//->A null-terminated string
//#endif
// Convert newlines to CRLFs for CEdit
/*
CString csCRLFText;
const _TCHAR* pSource = (LPCTSTR)m_csText;
_TCHAR* pDest = csCRLFText.GetBuffer(m_csText.GetLength() * 2);
int nSrcChar = 0, nDestChar = 0;
while ( pSource[nSrcChar] )
{
if ( pSource[nSrcChar] == _T('\n') && (nSrcChar == 0 || pSource[nSrcChar-1]!=_T('\r')) )
pDest[nDestChar++] = _T('\r');
pDest[nDestChar++] = pSource[nSrcChar++];
}
csCRLFText.ReleaseBuffer(nDestChar);
m_csText = csCRLFText;*/
// Parse
TimeBefore();
m_bIsParsed = m_doc.SetDoc( m_csText );
if ( m_bIsParsed )
TimeAfter( TitleFromPath(lpszPathName), _T("parse") );
else
ShowError( TitleFromPath(lpszPathName), m_doc.GetError() );
delete [] pBuffer;
SetModifiedFlag( FALSE );
return TRUE;
}
//保存有问题了...(虚函数)
BOOL CMarkupDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
// Get text out of view
CString csViewText;
POSITION pos = GetFirstViewPosition();
if ( pos )
{
CMarkupView* pView = (CMarkupView*)GetNextView(pos);
pView->GetEditText( csViewText );
}
/*
#if defined( _UNICODE )
CString csDoc = m_doc.GetDoc();
if ( ! IsParsed() )
csDoc = csViewText;
int nUTF8Len = WideCharToMultiByte(CP_UTF8,0,csDoc,csDoc.GetLength(),NULL,0,NULL,NULL);
char* pBuffer = new char[nUTF8Len+1];
WideCharToMultiByte(CP_UTF8,0,csDoc,csDoc.GetLength(),pBuffer,nUTF8Len+1,NULL,NULL);