UTF-8 delphi 函数

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.
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.
时间: 2024-11-11 22:32:09

UTF-8 delphi 函数的相关文章

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

http://blog.sina.com.cn/s/blog_66357ab901012t2h.html delphi 函数isiconic 函数 判断窗口是否最小化 (2012-05-26 22:00:21) 转载▼ 标签: 杂谈   The IsIconic function determines whether the specified window is minimized (iconic). 函数isiconic返回值取决于指定窗口是否已经最小化. BOOL IsIconic(HWN

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

问题描述 Delphi函数的out.var等关键字的作用,和使用场景 Delphi函数的out.var等关键字的作用,和使用场景,我知道var是作为传值调用,但是像out这个关键字又是什么作用呢? 解决方案 在过程或函数中,out主要用于COM和CORBA技术,Delphi解释: An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the init

Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)

delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) of Object; 两者样子差不多但实际意义却不一样, TMouseProc只是单一的函数指针类型; TMouseEvent是对象的函数指针,也就是对象/类的函数/方法 区别在于类方法存在一个隐藏参数self,也就是说两者形参不一样,所以不能相互转换 这也就是为什么delphi中可以这样赋值 but

Delphi 函数的重载和作用域

1.在delphi 中,我们可以使用相同的函数名来调用不同的函数,我们称这个函数为重载,函数的参数类型和参数的个数可以不同,用到的关键字overload:格式如下: function addInt(x,y:integer):string;overload;begin  result := intToStr(x + y);end; function addInt(x,y,z:integer):string;overload;begin  result := intToStr(x + y + z);

Delphi 函数指针(三大好处:灵活,委托的本质,回调机制)

首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明一个过程类型,该类型带一个通过引用传递的整型参数: type   IntProc = procedure (var Num: Integer); 这个过程类型与任何参数完全相同的例程兼容,即用它声明的变量,可以指向任何此类函数,并通过其进行函数的调用.下面是一个兼容例程: procedure Dou

Delphi函数动态调用实现免杀

Delphi 源码免杀之函数动态调用实现免杀的下载者自己编译这份代码看看过N多杀软没什么技术含量只是发出来给不懂的人入入门也防止有新人老是来问 ShellApi,URLMon 单元 //Delphi动态调用API函数 procedure TForm1.Button1Click(Sender: TObject); var SourceFile:ansistring; DestFile :ansistring; down2:function(Caller: IUnknown; URL: PChar;

Delphi函数指针的使用(转)

delphi中可以通过函数指针把一个函数作为参数来传递,然后在另外一个函数中调用. 1) 首先,申明函数指针类型TFunctionParameter. type          TFunctionParameter = function(const value : integer) : string; 2) 定义准备被作为参数传递的函数 function One(const value : integer) : string;         begin            result :

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

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

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

在C/C++等语言中,函数执行到 return 部分之后,将立即停止函数的执行,并返回值 但是在Delphi中不同 函数中,执行到result时,并不同于比如 C/C++ 中的 return,跳出函数,而是会继续执行下去,直到函数结束 下列代码: function(var A:string):string; var S,S1,S2:string; begin Result := ''; //此处将继续往下执行 ...... A:=S1; ...... A:=S2; ...... Result :

Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法

1. Delphi中的全局函数 //要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Button1: TButton;     proce