2007
(91, 230, 160, 183, 230, 156, 172, 231, 187, 147, 230, 158, 156, 46, 38, 35, 51, 52, 59, 233, 161, 185, 231, 155, 174, 38, 35, 51, 52, 59, 93, 32, 91, 230, 160, 183, 230, 156, 172, 231, 187, 147, 230, 158, 156, 46, 38, 35, 51, 52, 59, 231, 174, 128, 231, 167, 176, 38, 35, 51, 52, 59, 93)
xe10 丢失了信息 176, 38
(91, 230, 160, 183, 230, 156, 172, 231, 187, 147, 230, 158, 156, 46, 38, 35, 51, 52, 59, 233, 161, 185, 231, 155, 174, 38, 35, 51, 52, 59, 93, 32, 91, 230, 160, 183, 230, 156, 172, 231, 187, 147, 230, 158, 156, 46, 38, 35, 51, 52, 59, 231, 174, 128, 231, 167, 63, 35, 51, 52, 59, 93)
fastreport6读取fastreport4的fr3文件时,最后一个中文字乱码。
分析发现
fr3文件中的xmlnode中Text是utf8编码的,但是在frxxml.pas当中ReadItem函数当中Text:=String(.....)
直接将字符串xml所有字符强转为string
如果其中包含Text:="uft8编码的内容"
utf8string强转时丢失了信息,导致frxXMLSerializer单元XMLTOObj函数从xmlNode.Text中读取信息时,UTF8Decode解码出错
有两个处理方案
1.给xmlnode添加一个AnsiText:AnsiString的属性,在ReadItme时将转换前的信息保存在这个属性当中;之后参考XMLToObj添加XMLToObjA。其中操作全部使用AnsiString操作。
2.另外一个方案就是直接在ReadItem函数中String转换前,将Text中的Utf8编码的内容解码为ansistring。XmlToobj函数从Text读取的解码函数都去掉。
方法一应该简单点
方案二node当中可能有多个Text=""的值,要处理的事多点
修改source目录下源码后,重新编译fastreport就可以