


















(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)
(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就可以
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。