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.
  • 相关阅读:
    VS编译 x64版本zlib库
    如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
    早前阅读live555源码做的笔记
    windows下 jemalloc编译
    简单的BSON OID生成实现
    Qt5.9静态库编译VS2015-x64
    [trouble shoot]atol和atoll
    LeetCode[Linked List]: Remove Duplicates from Sorted List II
    HighCharts实现多数据折线图分列显示
    用户空间驱动
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4783258.html
Copyright © 2011-2022 走看看