zoukankan      html  css  js  c++  java
  • Delphi fastreport乱码处理

    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就可以

    酒肉穿肠过 佛祖心中留 世人若学我 如同入魔道
  • 相关阅读:
    Tomcat 7 简单定制
    Tomcat 启动卡在 Root WebApplicationContext: initialization completed in
    nacos 1.1.x 集群部署笔记
    ERROR 1044 (42000): Access denied for user 'root'@'localhost'
    logrotate 不生效
    Keepalived + Haproxy + PXC 理论篇
    Percona MongoDB 4 搭建副本集
    装饰器模式
    上拉电阻和下拉电阻
    Arduino基本数据类型
  • 原文地址:https://www.cnblogs.com/jspdelphi/p/15657705.html
Copyright © 2011-2022 走看看