TinyXml 保存文件乱码
2015-04-24 14:55
309 查看
UTF-8的格式标志其实就是文件头的三个字节:0xEF,0xBB,0xBF
用UltraEdit打开这个xml,UltraEdit就把它认为是一个UTF-8的文本文件了
打开UTF8 的xml文件需要使用转换函数WideCharToMultiByte和MultiByteToWideChar
void ConvertUtf8ToGBK(CString& strUtf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8.GetBuffer(), -1, NULL, 0);
wchar_t * wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8.GetBuffer(), -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
写UTF8文件:
在tinyxml.cpp文件中搜索“useMicrosoftBOM”,把“useMicrosoftBOM = false;”这个语句改为“useMicrosoftBOM = true;”就可以了 ----测试不行。
void CDuiFrameWnd::ConvertGBKToUtf8(CString& strGBK)
{
int len = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK.GetBuffer(), -1, NULL, 0);
wchar_t * wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK.GetBuffer(), -1, wszGBK, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, szGBK, len, NULL, NULL);
strGBK = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
写入正常显示中文
用UltraEdit打开这个xml,UltraEdit就把它认为是一个UTF-8的文本文件了
打开UTF8 的xml文件需要使用转换函数WideCharToMultiByte和MultiByteToWideChar
void ConvertUtf8ToGBK(CString& strUtf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8.GetBuffer(), -1, NULL, 0);
wchar_t * wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8.GetBuffer(), -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
写UTF8文件:
在tinyxml.cpp文件中搜索“useMicrosoftBOM”,把“useMicrosoftBOM = false;”这个语句改为“useMicrosoftBOM = true;”就可以了 ----测试不行。
void CDuiFrameWnd::ConvertGBKToUtf8(CString& strGBK)
{
int len = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK.GetBuffer(), -1, NULL, 0);
wchar_t * wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK.GetBuffer(), -1, wszGBK, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, szGBK, len, NULL, NULL);
strGBK = szGBK;
delete[] szGBK;
delete[] wszGBK;
}
写入正常显示中文
相关文章推荐
- 让TinyXML保存文件为UTF-8格式
- Dom4j保存数据乱码以及xml文件头编码格式改变的原因和解决方法
- 让TinyXML保存文件为UTF-8格式
- 让TinyXML保存文件为UTF-8格式
- 关于使用java从http接口取数据保存到本地文件的中文乱码处理
- 使用SAX解析将xml的文件内容结构保存到java对象中
- myeclipse 中js文件乱码不能保存解决方案
- C#中保存XML文件时加入头部定义行
- Thinkphp上传文件,保存时显示乱码
- c#读取/保存 Xml文件
- 在离线状态下保存数据可能会用到的XML文件读写
- xml基本操作和保存配置文件应用实例
- spring的xml配置文件中获取jdbc.properties乱码导致连接数据库失败
- FLASH读取JAVA生成的XML文件,不同平台乱码
- tp3上传文件,源文件名保存,中文乱码问题
- 图像保存到XML文件和从XML中取出图像显示
- 使用Redis保存Spring session(基于XML配置文件)
- 将图片保存到一个XML文件
- Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题
- 使用记事本编写xml文件保存出现异常解决办法