Delphi7及其以下版本的 VCL 只支持 Ansi,

所以在使用WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示

Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空。

新建一个util_utf8.pas,然后引用这个转换函数可以解决这个bug

unit util_utf8;

 

interface

 

uses Windows;

 

type

  UTF8String = AnsiString;

 

  function AnsiToWide(const S: AnsiString): WideString;

  function WideToUTF8(const WS: WideString): UTF8String;

  function AnsiToUTF8(const S: AnsiString): UTF8String;

  function UTF8ToWide(const US: UTF8String): WideString;

  function WideToAnsi(const WS: WideString): AnsiString;

  function UTF8ToAnsi(const S: UTF8String): AnsiString;

 

implementation

 

function AnsiToWide(const S: AnsiString): WideString;

var

  len: integer;

  ws: WideString;

begin

  Result:='';

  if (Length(S) = 0) then

    exit;

  len:=MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, nil, 0);

  SetLength(ws, len);

  MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, PWideChar(ws), len);

  Result:=ws;

end;

 

function WideToUTF8(const WS: WideString): UTF8String;

var

  len: integer;

  us: UTF8String;

begin

  Result:='';

  if (Length(WS) = 0) then

    exit;

  len:=WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, nil, 0, nil, nil);

  SetLength(us, len);

  WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, PChar(us), len, nil, nil);

  Result:=us;

end;

 

function AnsiToUTF8(const S: AnsiString): UTF8String;

begin

  Result:=WideToUTF8(AnsiToWide(S));

end;

 

function UTF8ToWide(const US: UTF8String): WideString;

var

  len: integer;

  ws: WideString;

begin

  Result:='';

  if (Length(US) = 0) then

    exit;

  len:=MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, nil, 0);

  SetLength(ws, len);

  MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, PWideChar(ws), len);

  Result:=ws;

end;

 

function WideToAnsi(const WS: WideString): AnsiString;

var

  len: integer;

  s: AnsiString;

begin

  Result:='';

  if (Length(WS) = 0) then

    exit;

  len:=WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, nil, 0, nil, nil);

  SetLength(s, len);

  WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, PChar(s), len, nil, nil);

  Result:=s;

end;

 

function UTF8ToAnsi(const S: UTF8String): AnsiString;

begin

  Result:=WideToAnsi(UTF8ToWide(S));

end;

 

end.

//*************************//**************************

//以上是一个文件,保存后引用。

//*************************//**************************

uses superobject, util_utf8;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  idHttp: TIdHTTP;
  get_back,tmp1,tmp2:string;
  jRet: ISuperObject;
  strm: TStringStream;
begin
   strm := TStringStream.Create('');
   try
      idHttp := TIdHTTP.Create(nil);
      IdHTTP1.Get(self.Edit1.Text, strm);
      get_back:=UTF8ToAnsi(strm.DataString);
      idHttp.Disconnect;
      idHttp.Free;
  finally
    strm.Free;
  end;
  jRet:=TSuperObject.Create(stObject);
  jRet := SO(copy(get_back,8,Length(get_back)-9));
  tmp1:= jRet.O['gszzl'].AsString();
  self.Label2.Caption :=jRet.O['name'].AsString()+':'+tmp1;
end;

Delphi7中idhttp和superobject获取网页中文乱码解决办法相关推荐

  1. linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法

    当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码. 下面是根据一些现象的合理推论: mdb文件来自于windows ...

  2. php接受get参数乱码,如何解决php get 参数乱码问题,php中文乱码解决办法

    如何解决php get 参数乱码问题如何解决php参数乱码的问题,乱码php获取参数的解决方案:1.使用"iconv ('GB 2312 ',' UTF-8 ',$龚辉):"解决乱 ...

  3. Qt中文乱码解决办法

    目录 一.解决方法: 1. QT4版本 2. QT5版本 二.QString 为什么会乱码呢 三.tr的使用 一.解决方法: 1. QT4版本 中文乱码解决办法是在main.cpp文件加入: #inc ...

  4. php7 中文乱码_PHP 中文乱码解决办法总结分析

    PHP 中文乱码解决办法总结分析 更新时间:2009年07月30日 01:19:43   作者: 总之一句话,要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致,如果页面申 ...

  5. NetBeans中文乱码解决办法

    首先来看看网上的一篇文章:http://it.dengchao.org/neatbeans-problem-fedora/linux/ 在Windows和Linux(Fedora/Ubuntu/Red ...

  6. java控制台打印输出 中文乱码 解决办法

    java控制台打印输出 中文乱码 解决办法 问题:IDEA控制台打印时出现中文乱码 原因:java资源的编码和ideal的不一致 解决办法: 第一步 1:打开intelliidea安装路径,Intel ...

  7. mysql数据库 中文乱码_数据库 MySQL中文乱码解决办法总结

    MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1 ...

  8. pycharm 运行控制台中文乱码解决办法

    pycharm 运行控制台中文乱码解决办法

  9. navicat for mysql 显示中文乱码解决办法

    navicat for mysql 显示中文乱码解决办法   最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题 ...

  10. windows下git bash中文乱码解决办法

    一.解决办法1:(直接上图) 1.在git bash下,右键 出现下图,选择options: 2.选择"Text" 3.将"Character set"设置为 ...

最新文章

  1. layui循环数据并渲染_layui使用表格渲染获取行数据的例子
  2. java文件流插入数据库_使用Java流查询数据库
  3. 多线程之:用户态和内核态的区别
  4. MyEclipse常用快捷键及快捷键大全
  5. 在Linux(ubuntu server)上面安装NodeJS的正确方法
  6. 【转】js之iframe子页面与父页面通信
  7. redis 安装并设置为开机启动服务
  8. 最简单的jQuery程序
  9. Python设置默认语言编码
  10. Notepad++在线安装使用JSON插件
  11. [转载] ANTLR——词法分析
  12. python中bind的用法_Javascript中bind()方法的使用与实现
  13. Dropbox被墙了,幸亏还有类似服务SugarSync
  14. [转载] python+opencv4读取图像
  15. 剑指offe55--链表中环的入口结点
  16. 2017年最后一篇文章:微信小程序游戏跳一跳刷榜原理解析!
  17. NeurIPS 2022 | 何恺明团队新作:MAE扩展到视频!学习时空表示,最优Mask比例高达90%!...
  18. 富士胶片3月底完成日立影像诊断业务收购;中国癌症早筛第一股诺辉健康登陆港交所 | 美通企业日报...
  19. JDBC占位符的使用
  20. 如何安装国内源(阿里云yum源)

热门文章

  1. u盘启动linux hp服务器,分享下用U盘启动给服务器【HP DL165 G7】安装原版2003系统的经验...
  2. mapxtreme 更改图元的位置
  3. 正确安装adb工具,且常用的adb命令
  4. Linux开发板移植minicom
  5. 光电编码器的原理及应用场合_光电编码器的原理及应用电路
  6. 车牌号识别易语言代码
  7. NodeJs 多核多进程并行框架实作 - CNode
  8. 华为交换机的使用命令及简单配置(亲测)
  9. Java 并发编程实战-创建和执行任务的最佳实践
  10. java计算机毕业设计台球收费管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署