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) = ) then
    exit;
  len:=MultiByteToWideChar(CP_ACP, , PChar(s), -, nil, );
  SetLength(ws, len);
  MultiByteToWideChar(CP_ACP, , PChar(s), -, PWideChar(ws), len);
  Result:=ws;
end;
  
function WideToUTF8(const WS: WideString): UTF8String;
var
  len: integer;
  us: UTF8String;
begin
  Result:='';
  if (Length(WS) = ) then
    exit;
  len:=WideCharToMultiByte(CP_UTF8, , PWideChar(WS), -, nil, , nil, nil);
  SetLength(us, len);
  WideCharToMultiByte(CP_UTF8, , PWideChar(WS), -, 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) = ) then
    exit;
  len:=MultiByteToWideChar(CP_UTF8, , PChar(US), -, nil, );
  SetLength(ws, len);
  MultiByteToWideChar(CP_UTF8, , PChar(US), -, PWideChar(ws), len);
  Result:=ws;
end;
  
function WideToAnsi(const WS: WideString): AnsiString;
var
  len: integer;
  s: AnsiString;
begin
  Result:='';
  if (Length(WS) = ) then
    exit;
  len:=WideCharToMultiByte(CP_ACP, , PWideChar(WS), -, nil, , nil, nil);
  SetLength(s, len);
  WideCharToMultiByte(CP_ACP, , PWideChar(WS), -, PChar(s), len, nil, nil);
  Result:=s;
end;
  
function UTF8ToAnsi(const S: UTF8String): AnsiString;
begin
  Result:=WideToAnsi(UTF8ToWide(S));
end;
  
end.
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
uses
  util_utf8;
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  strm: TStringStream;
begin
  strm := TStringStream.Create('');
  try
    IdHTTP1.Get('http://gz.ganji.com/zpshichangyingxiao/', strm);
    Memo1.Clear;
    Memo1.Lines.Add(UTF8ToAnsi(strm.DataString));
  finally
    strm.Free;
  end;
end;
 
end.

UTF-8 delphi 函数的更多相关文章

  1. 转:Delphi 函数大全

    Delphi 函数大全 - xiucaiyao的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/xiucaiyao/article/details/4544039 名 ...

  2. cef3 获得js 返回值, 以及js 指挥delphi 函数的 总结参考

     cef3  如何加载 本地html 文件.   请教老师[吐槽]常忘<run_fan@qq.com>  22:21:45@lazarus 下载cef3中的范例中就有  [吐槽]常忘< ...

  3. Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入

    首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...

  4. Delphi函数的out、var等关键字的作用,和使用场景

    问题描述 Delphi函数的out.var等关键字的作用,和使用场景 Delphi函数的out.var等关键字的作用,和使用场景,我知道var是作为传值调用,但是像out这个关键字又是什么作用呢? 解 ...

  5. delphi函数大全

    delphi函数大全Abort                 函数    引起放弃的意外处理Abs                   函数    绝对值函数AddExitProc          ...

  6. delphi 函数isiconic 函数 判断窗口是否最小化

    http://blog.sina.com.cn/s/blog_66357ab901012t2h.html delphi 函数isiconic 函数 判断窗口是否最小化 (2012-05-26 22:0 ...

  7. Delphi函数的返回值(注意这里与C/C++等语言有差异)

    在C/C++等语言中,函数执行到 return 部分之后,将立即停止函数的执行,并返回值 但是在Delphi中不同 函数中,执行到result时,并不同于比如 C/C++ 中的 return,跳出函数 ...

  8. Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类

    Delphi的参数可以分为:默认参数(传值).var(传址).out(输出).const(常数)四类 可以对比C/C++的相关知识,类比学习. 1.默认参数是传值,不会被改变,例子 function ...

  9. Delphi函数指针

    参考:http://blog.chinaunix.net/uid-91034-id-2009700.html http://blog.csdn.net/procedure1984/article/de ...

  10. Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)

    Delphi里做了魔法变化,每个变量名称本身就是指针,因为不怎么需要指针语法.我也不知道是不是因为这个原因引起的Delphi与VC对句柄的不同处理. 这是Delphi的强行关机函数,好用,调用方式:W ...

随机推荐

  1. TCP可靠传输详解

    TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一 ...

  2. Wireshark 与 Tcpdump

    [1]Wireshark 与 Tcpdump Wireshark是Windows下非常容易上手的抓包工具.但在Linux下很难找到一个好用的图形界面抓包工具.还好有Tcpdump.我们可以用Tcpdu ...

  3. 关于IIS上Yii2的Url路由美化

    Yii2默认的路由是酱紫的 http://.../admin/web/index.php?r=site/login 心中理想的美化Url应该这样  http://.../admin/web/site/ ...

  4. 在Linux中显示日历(cal)

    cal 2013    显示2013年整年日历 cal 7 2013  显示2013年 7 月 日历

  5. IOS超强表格控件GMGridView

    本文转载至 http://zyc-to.blog.163.com/blog/static/1715240020124235837247/ 介绍: iOS为我们提供UITableView类,实现了项目的 ...

  6. 使用ILookup<TKey, TElement> 接口查找集合

    public class Program { public static void Main() { // 创建一个放入ilookup数据结构的School清单. List<School> ...

  7. sgu Theodore Roosevelt【判断点是否在凸多边形内模板】

    链接: http://acm.sgu.ru/problem.php?contest=0&problem=253 http://acm.hust.edu.cn/vjudge/contest/vi ...

  8. POJ 2856 Y2K Accounting Bug【简单暴力】

    链接: http://poj.org/problem?id=2586 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#probl ...

  9. git生成public key

    1 配置user name和email git config --global user.name "xxx" git config --global user.email &qu ...

  10. Redis的主从同步手动执行故障切换

    1.准备三个redis配置文件,通过端口的区分,启动三个redis数据库实例,然后配置主从复制. # a6371.conf port 6371 daemonize yes pidfile /data/ ...