如题

解决方案 »

  1.   

    文本方式读需要做 utf8 等转 gb2312 就可以了;更加简单的,用 MSXML 读取,可以自动做编码转换。
      

  2.   

    不知道你的整个XML文件是用utf8编码的,还是XML节点内容是用utf8编码的,要先分清楚,用现成的API就可以转换
      

  3.   

    首先将utf8转换成unicode,然后就可以用CStdioFile等处理了
      

  4.   

    ok了 将utf-8转换成unicode
    回头整理一个函数,可判断文本文件编码格式 自动转换为unicode
      

  5.   

    非要在管理帖子页面才能回复?如何判断文本文件是Utf-8的,下面的方法对UTF-8不管用呀 我再试试
    如果编码仅仅存在UTF-8或者GB2312或者UNICODE这三种可能的话,是可以判断的。 
    UTF-8编码的文件头前3个字节为0xEF   0xBB   0xBF。 
    UNICODE文件头前两个字节为0xFF   0xFE或者UNICODE_BIG_ENDIAN的时候为0xFE   0xFF。 
    ANSI或者GB2312无文件头。
      

  6.   

    读前三个就可以了0xEF 0xBB 0xBF,感觉没必要考虑太复杂
      

  7.   

    // 从指定的Utf8编码文件获取内容字符串。参数的含义:
    // CString strUtf8FileFullPath——[in]指定的Utf8编码文件全路径
    // 备注:要求指定的文件是Utf8编码的。否则,获取的字符串乱码!
    CString GetContentFromUtf8File(CString strUtf8FileFullPath)
    {
    // 打开文件
    CFile myFile;
    if( !myFile.Open(strUtf8FileFullPath, CFile::modeRead) )
    {
    OutputDebugString(_T("GetContentFromUtf8File——文件打开失败!文件路径:") + strUtf8FileFullPath);
    return _T("");
    }
    // 读取文件内容
    LONGLONG llSize = myFile.GetLength();
    BYTE* pBuf = new BYTE[llSize + 1];
    ZeroMemory(pBuf, llSize + 1);
    myFile.Read(pBuf, llSize);
    myFile.Close(); // 由于文件是Utf8编码的,需要转换为Unicode编码!
    USES_MYCP_CONVERSION;
    USES_CP_UTF8;
    CString strFileContent = CP2W((const char*)(LPCTSTR)pBuf, CP_UTF8);
    delete[] pBuf; CString strOutput = _T("");
    strOutput.Format(_T("GetContentFromUtf8File——文件名:%s\r\n\r\n文件内容:\r\n%s"), strUtf8FileFullPath, strFileContent);
    OutputDebugString(strOutput); return strFileContent;
    }
      

  8.   

    // 从指定的Xml文件获取内容字符串。参数的含义:
    // CString strXmlFileFullPath——[in]指定的Xml文件全路径
    // CString& strFileContent——[out]记录文件内容
    BOOL GetContentFromXmlFile(CString strXmlFileFullPath, CString& strFileContent)
    {
    strFileContent = _T(""); CoInitialize(NULL); BOOL bResult = FALSE; MSXML::IXMLDOMDocumentPtr pXMLDocument = NULL;
    HRESULT hr = pXMLDocument.CreateInstance(_uuidof(MSXML::DOMDocument));
    if( FAILED(hr) || pXMLDocument == NULL )
    // 创建文档实例失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——创建XML文档实例失败!"));
    }
    else if( FAILED(pXMLDocument->put_async(VARIANT_FALSE)) )
    // 禁止异步操作失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——禁止异步操作失败!"));
    }
    else if( pXMLDocument->load( (CComVariant)strXmlFileFullPath ) != VARIANT_TRUE )
    // 加载Xml文件失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——加载XML文件'") + strXmlFileFullPath + _T("'失败!"));
    }
    else
    {
    // 获取文件内容
    strFileContent = (LPCTSTR)pXMLDocument->Getxml(); // 至此,操作成功!
    bResult = TRUE;
    } CString strOutput = _T("");
    strOutput.Format(_T("GetContentFromXmlFile——文件名:%s\r\n\r\n文件内容:\r\n%s"), strXmlFileFullPath, strFileContent);
    OutputDebugString(strOutput); // 资源回收
    if( pXMLDocument != NULL )
    {
    pXMLDocument.Release();
    }

    CoUninitialize(); return bResult;
    }
      

  9.   

    // 从指定的Xml文件获取内容字符串。参数的含义:
    // CString strXmlFileFullPath——[in]指定的Xml文件全路径
    // CString& strFileContent——[out]记录文件内容
    BOOL GetContentFromXmlFile(CString strXmlFileFullPath, CString& strFileContent)
    {
    strFileContent = _T(""); CoInitialize(NULL); BOOL bResult = FALSE; MSXML::IXMLDOMDocumentPtr pXMLDocument = NULL;
    HRESULT hr = pXMLDocument.CreateInstance(_uuidof(MSXML::DOMDocument));
    if( FAILED(hr) || pXMLDocument == NULL )
    // 创建文档实例失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——创建XML文档实例失败!"));
    }
    else if( FAILED(pXMLDocument->put_async(VARIANT_FALSE)) )
    // 禁止异步操作失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——禁止异步操作失败!"));
    }
    else if( pXMLDocument->load( (CComVariant)strXmlFileFullPath ) != VARIANT_TRUE )
    // 加载Xml文件失败
    {
    OutputDebugString(_T("GetContentFromXmlFile——加载XML文件'") + strXmlFileFullPath + _T("'失败!"));
    }
    else
    {
    // 获取文件内容
    strFileContent = (LPCTSTR)pXMLDocument->Getxml(); // 至此,操作成功!
    bResult = TRUE;
    } CString strOutput = _T("");
    strOutput.Format(_T("GetContentFromXmlFile——文件名:%s\r\n\r\n文件内容:\r\n%s"), strXmlFileFullPath, strFileContent);
    OutputDebugString(strOutput); // 资源回收
    if( pXMLDocument != NULL )
    {
    pXMLDocument.Release();
    }

    CoUninitialize(); return bResult;
    }