1、背景
XML(Extensible Markup Language)是一种可以用来创建自定义标记的标记语言,我们经常使用它来进行数据传递。Microsoft提供了XML内核服务()MSXML使得我们可以加载或创建DOM(Document Object Model)文档。在实际使用过程中,我们发现XML中一些特殊字符会自动转换为一些特殊编码。本文只讨论各种不同编码格式xml文本的生成,对于某种格式编码的特殊字符或超过编码范围的字符留待后面作进一步讨论。
2、各种编码格式文件生成的解决方案
1)ANSI码文件
方案1:
HANDLE hFile = CreateFile(“C://XXX.xml”, GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
if ( hFile != INVALID_HANDLE_VALUE )
{
DWORD dwNumWritten = 0;
BOOL bRes = WriteFile( hFile, strxml.c_str(), strxml.size(), &dwNumWritten, NULL);
CloseHandle(hFile);
}
方案2:
FILE *pf = fopen(“C://sms.xml”, “wb+”);
if (pf)
{
Size_t szLen = fwrite(pszText, 1, nLen,pf);
fclose(pf);
}
2)Unicode码文件
方案1:
HANDLE hFile = CreateFile(L“C://XXX.xml”, GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);
if ( hFile != INVALID_HANDLE_VALUE )
{
DWORD dwNumWritten = 0;
BOOL bRes = WriteFile( hFile, wpszText, nLen, &dwNumWritten, NULL);
CloseHandle(hFile);
}
方案2:
FILE *pf =_w fopen(L“C://sms.xml”, “wb+,ccs=unicode”);
if (pf)
{
Size_t szLen = fwrite(pszText, 1, nLen,pf);
fclose(pf);
}
3)Utf-8文件
FILE *pf = _wfopen( L"c://sms.xml",L"wb+,ccs=UTF-8");
if ( pf )
{
size_t szLen = fwrite(pUtf8Text, 1, nLen, pf);
fclose(pf);
}
3、测试
本代码在VC6及VS2005.NET下测试通过。
4、待解决问题
本文只是讨论文件的生成,对于生成的文件,如果含有超出编码范围的特殊字符,xml仍然是非法XML文件,比如,对于utf-8的xml文件,如果内含十六进制值0XFF,0XFE的内存,就是一个非法XML文件。怎样让XML文件有效,是我们进一步需要弄清楚的问题。
5、参考
略。
多种编码格式文件的保存
最新推荐文章于 2023-04-27 15:46:55 发布
224

被折叠的 条评论
为什么被折叠?



