zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    (C/C++学习笔记) 五. 常变量(只读变量)和宏
    (C/C++学习笔记) 四. 运算符
    (C/C++学习笔记) 三. 作用域和可见性
    (C/C++学习笔记) 一. 基础知识
    计算机科学的基本术语及其英语表达
    模块与包
    Python的递归
    内置函数与匿名函数
    装饰器,迭代器,生成器分析
    命名关键字参数,函数对象,嵌套,名称空间与作用域,闭包
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4783258.html
Copyright © 2011-2022 走看看