在UNICODE环境下由CSteing转换为string的方法

it2023-10-23  73

比如在MFC下用TinyXml写xml文件时编辑的代码

try { TiXmlDocument *myDocument = new TiXmlDocument(); TiXmlElement *RootElement = new TiXmlElement("Persons"); myDocument->LinkEndChild(RootElement); TiXmlElement *PersonElement = new TiXmlElement("Person"); RootElement->LinkEndChild(PersonElement); PersonElement->SetAttribute("ID", "1"); PersonElement->SetAttribute("other", "info"); TiXmlElement *NameElement = new TiXmlElement("name"); TiXmlElement *AgeElement = new TiXmlElement("age"); PersonElement->LinkEndChild(NameElement); PersonElement->LinkEndChild(AgeElement); TiXmlText *NameContent = new TiXmlText("Michael"); TiXmlText *AgeContent = new TiXmlText("23"); NameElement->LinkEndChild(NameContent); AgeElement->LinkEndChild(AgeContent); CString appPath = GetAppPath(); string seperator = "\\"; string fullPath = appPath.GetBuffer(0) + seperator + szFileName; myDocument->SaveFile(fullPath.c_str()); delete myDocument; } catch (string& e) { return false; } return true;

上面这个代码给我报错,经查询是CString需要转换为string类型,经查询网上给的可行转换方法如下:

CString src = _T("你好"); CStringA temp = src.GetBuffer(0); string text = temp.GetBuffer(0);

但是在有些情况下还是会报同样的错,和没转换一个样,这个问题需要将上面的代码改写,改写为:

CString src; CStringA temp; string text; src = _T("你好"); temp = src.GetBuffer(0); text = temp.GetBuffer(0);

及改后代码为:

try { TiXmlDocument *myDocument = new TiXmlDocument(); TiXmlElement *RootElement = new TiXmlElement("Persons"); myDocument->LinkEndChild(RootElement); TiXmlElement *PersonElement = new TiXmlElement("Person"); RootElement->LinkEndChild(PersonElement); PersonElement->SetAttribute("ID", "1"); PersonElement->SetAttribute("other", "info"); TiXmlElement *NameElement = new TiXmlElement("name"); TiXmlElement *AgeElement = new TiXmlElement("age"); PersonElement->LinkEndChild(NameElement); PersonElement->LinkEndChild(AgeElement); TiXmlText *NameContent = new TiXmlText("Michael"); TiXmlText *AgeContent = new TiXmlText("23"); NameElement->LinkEndChild(NameContent); AgeElement->LinkEndChild(AgeContent); CString appPath; CStringA temp; string appPathtext; appPath = GetAppPath(); temp = appPath.GetBuffer(0); appPathtext = temp.GetBuffer(0); string seperator = "\\"; string fullPath = appPathtext + seperator + szFileName; myDocument->SaveFile(fullPath.c_str()); delete myDocument; } catch (string& e) { return false; } return true;
最新回复(0)