如何让Expat支持中文XML

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

刚刚学习使用Expat,却发现Expat并不支持中文。后来查找相关资料,得知Expat不支持gb2312编码格式,主要支持UTF-8编码格式。然而我们在程序中传递数据时,往往是用的gb2312格式文本的,于是想找出办法解决之,想到两种办法:

1、改写Expat源代码,这样效率高,但不方便今后Expat代码的升级;

2、首先将gb2312格式的文本转换为UTF-8格式文本,然后让Expat解析,解析出的数据再转换为gb2312格式以方便处理。效率较第一种方法低。

最终选择了第二种方法解决该问题。

示例代码:http://www.yanghan.net/codes/ExpatSaxDemo.rar

代码中CCodingConv为gb2312和UTF-8互相转换的类,CGB2312XML为接收解析数据的类,使用SAX方式解析,该类支持gb2312格式的xml文件,当然也可以支持UTF-8格式的xml文件。

为便于理解,Demo程序将解析出的xml数据仍按xml的样子输出到屏幕上,且将"<"、">"符号换为了"["、"]"。

以下便是输出结果:

[library]

[book format="16开" pages="900"]

[!--This is a comment demo--]

[书名]C++程序设计语言(特别版)[/书名]

[author]

[name]Bjarne Stroustrup[/name]

[nationality]United States[/nationality]

[/author]

[翻译]

[译者]裘宗燕[/译者]

[出版社]机械工业出版社[/出版社]

[/翻译]

[/book]

[/library]

Expat源代码:http://www.yanghan.net/codes/Expat-1.95.8.rar

注意:本示例程序使用的Expat静态连接库,然而在编译时遇到连接错误,后来将expat_external.h中的

#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL

改为如下:

#ifdef _EXPAT_USE_STATIC_LIB

#define XMLPARSEAPI(type) type

#else

#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL

#endif

然后在工程设置中添加_EXPAT_USE_STATIC_LIB宏从而得以解决。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航