论坛首页 编程语言技术论坛

Tuscany SDO中的中文问题

浏览 1964 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-17  
C++

Tuscany SDO中的中文问题

作者:ling091 时间:2008-12-17

由于SDO使用的xml解析器libxml2对中文字符存在编码转换问题,所以通过xml文件或字符串反序列化创建的SDO对象中的属性中如果有中文就会显示为乱码。而且向反序列化方法传递的参数的形式也可能使得SDO对象创建失败。详见《Tuscany SDO中的Bughttp://ling091.iteye.com/admin/blogs/295438

解决此问题的一种方法是在输出时带有中文的内容时首先对其进行格式转换然后再输出,可以使用iconv提供的api进行UTF-8GB2312之间的编码转换。iconvapi的使用见《Libxml2中的中文问题的解决》http://ling091.iteye.com/admin/blogs/295872

另一种方式是修改SDO,在构造SDO对象时,就对其进行格式转换,但这种方式在直接将SDO对象写入文件或数据库时有可能面临新的问题。

 需要注意的是,从xml字符串或xml文件构造SDO时,编码必须是UTF-8,因为libxml2默认的编码方式就是UTF-8,否则会构造不成功。这里的编码方式不仅仅是指xml文件头部的encoding = "UTF-8", 而是需要使用支持UTF-8编码格式的编辑器进行编辑(Altova XMLSpyUltra Edit32),直接使用txt编辑的中文不是UTF-8编码的。

 另外由于从文件和xml构造SDO对象的实现方式不同,需要xml文件的头部必须是encoding = "UTF-8" ,而字符串写成encoding = "UTF-8" "GB2312",甚至没有xml头都是可以的。

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics