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

2018-11-25  本文已影响0人  维度WeDo愉快

近期一个小产品用到了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
我的简介:号称是个技术工程师但是从没有深入的学习技术,都是停留在知其然上面,对其所以然研究甚少,以后通过这里学习和记录其所以然。

上一篇下一篇

猜你喜欢

热点阅读