美文网首页
1.1 Delphi10.2(xe10)写本地html遇到的字符

1.1 Delphi10.2(xe10)写本地html遇到的字符

作者: 维度WeDo愉快 | 来源:发表于2018-11-25 09:46 被阅读0次

    近期一个小产品用到了echarts图像报表,需要调整里面的数据,但是总是出现乱码,过程如下:

    问题描述

    Delphi10.2(xe10)写本地html遇到的字符集问题(汉字输出乱码问题)

    错误方法

    ......
    ls := TStringList.Create;
      ls.LoadFromFile(lBase);
      for i := 0 to ls.Count - 1 do
      begin
        ltmp := ls[i];
        if pos('var lTitle = []', ltmp) > 0 then
        begin
          ltmp := 'var lTitle = ' + lTitle; 
          ls[i] := (ltmp);
        end;
        if pos('var lData =[]', ltmp) > 0 then
        begin
          ltmp := 'var lData =' + lData; 
          ls[i] := (ltmp);
        end;
      end;
      ls.SaveToFile(lMain);//这里保存完以后直接看html是乱码
    ......
    

    现在看delphi中的好多控件还是用ansi表示方式,后百度了很多说的都不对,只有下面的方法是对的。贡献给大家。

    正确处理

    1. 定义如下函数
    procedure SaveUTF8File(const vFileName: string; vListText: TStringList);
    var
      a: TEncoding;
    begin
      a := TEncoding.GetEncoding(CP_UTF8);
      try
        vListText.SaveToFile(vFileName, a);
      finally
        a.free;
      end;
    end;
    
    1. 调整先前的代码
    ......
    ls := TStringList.Create;
      ls.LoadFromFile(lBase);
      for i := 0 to ls.Count - 1 do
      begin
        ltmp := ls[i];
        if pos('var lTitle = []', ltmp) > 0 then
        begin
          ltmp := 'var lTitle = ' + lTitle; 
          ls[i] := (ltmp);
        end;
        if pos('var lData =[]', ltmp) > 0 then
        begin
          ltmp := 'var lData =' + lData; 
          ls[i] := (ltmp);
        end;
      end;
      SaveUTF8File(lMain,ls);//这里是【重点】
    ......
    

    我的昵称:维度WeDo
    我的主页:https://www.jianshu.com/u/c902b6d388b6
    我的简介:号称是个技术工程师但是从没有深入的学习技术,都是停留在知其然上面,对其所以然研究甚少,以后通过这里学习和记录其所以然。

    相关文章

      网友评论

          本文标题:1.1 Delphi10.2(xe10)写本地html遇到的字符

          本文链接:https://www.haomeiwen.com/subject/jeauqqtx.html