读书人

CMarkup的字符编码有关问题UTF-8转ANSI

发布时间: 2012-03-21 13:33:14 作者: rapoo

CMarkup的字符编码问题UTF-8转ANSI?
工程设置:VC6.0 + MFC.exe + _MBCS

需求:分析服务器返回的UTF-8 xml字符串,然后将直接保存为或着加入现有的UTF-8 xml文件中。

描述:(文件fileName为UTF-8格式的xml文件)
CMarkup xml;
xml.Load("D:\\fileName.xml");//1
xml.AddSubDoc("UTF-8字符串");//2
xml.SetAttrib("id",CString("字符串"));//3
xml.GetAttrib("id");//4
xml.Save("fileName");//5.

问题(xml文件可能不含编码描述):
1.xml对象保存在内存中的内容是UTF-8 还是已经转换为ANSI了??
2.所加入的字符串有没有转换为其它编码?
3.CString("字符串")是否为ANSI编码,其存于xml中的编码是否转换为UTF-8?
4.返回的CString是ANSI编码还是UTF-8编码?
5.其保存的编码格式是UTF-8还是ANSI?

不知道描述清楚了没有。。。
在此先谢谢各位啦!


[解决办法]
记住一个原则:以后尽量避免使用 ANSI 编码,它的局限太多了。

UTF-8编码因为体积小,适合存储和网络传输环节,但在字符串运算、显示等环节是很不方便的,通常软件会在读取UTF-8字符串后直接转换成UNICODE再执行各种运算(本来转成ANSI也可以,但应避免),再转换回UTF-8后保存。
掌握了这个原理就知道如何处理了,不管用哪个XML解析库,涉及到DOM操作的类方法都直接使用UNICODE字符串(因为要运算),保存时通常可以配置期望的编码格式,解析库会自动转换。
[解决办法]

探讨
引用:
记住一个原则:以后尽量避免使用 ANSI 编码,它的局限太多了。

UTF-8编码因为体积小,适合存储和网络传输环节,但在字符串运算、显示等环节是很不方便的,通常软件会在读取UTF-8字符串后直接转换成UNICODE再执行各种运算(本来转成ANSI也可以,但应避免),再转换回UTF-8后保存。
掌握了这个原理就知道如何处理了,不管用哪个XML解析库,涉及到DOM操作的类方法都直接使用UNICODE字符串(因为要运算),保存时通常可以配置期望的编码格式,解析库会自动转换。

有道理。顺便问一下,定义_MBCS后,CString(_T("字符串"))存储的字符串编码是什么呢?

[解决办法]
CMarkup类里面有个函数UTF8ToA

另外 同意楼上几位的说法

读书人网 >VC/MFC

热点推荐