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.
  • 相关阅读:
    poll系统调用的内核态实现机制分析
    Tomcat与web程序结构与Http协议
    关于java的环境变量的一点总结
    我想成为大牛,第一队,不要单打独斗
    ubuntu12.04单卡server(mentohust认证)再加上交换机做路由软件共享上网
    写在程序猿的困惑(特别Java程序猿)入行一年,感觉我不知道接下来该怎么办才能不断进步的,寻求翼
    三大趋势在移动互联网发展
    031 二进制1的数量(keep it up, 看到这个问题,刚开始有点蒙)
    【Java】【Flume】Flume-NG阅读源代码AvroSink
    PHP中间uniqid在高并发重复问题
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4783258.html
Copyright © 2011-2022 走看看