码迷,mamicode.com
首页 > Web开发 > 详细

TEncoding & TNetEncoding(使用现成的TBase64Encoding,TEncoding和TMBCSEncoding)

时间:2016-08-07 00:56:40      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:

TEncoding and TNetEncoding are abstract classes and you will never instantiate one of them, because only the descendants will have the full functionality. Normally you would need to write something like this...

Code:
var
  Encoding: TEncoding
  Buffer: TArray<Byte>;
begin
  Encoding := TMBCSEncoding.Create(GetACP, 0, 0);
  try
    Buffer := Encoding.GetBytes(‘Hello world!‘);
    (...)
  finally
    Encoding.Free();
  end;
end;

...and you get the ANSI values for "Hello world!". But this isn‘t really funny and bloates the code, therefore often used Encodings like ASCII, ANSI, UTF8 and other are implemented as Singleton. Therefore the using is normally something like this...

Code:
var
  Buffer: TArray<Byte>;
begin
  Buffer := TEncoding.ANSI.GetBytes(‘Hello world!‘);
  (...)
end;

In this case the RTL holds and manages an instance of an ANSI encoding object and you will always get the same object. Now sometimes it‘s needed to work with other code pages and for this cases the function "GetEncoding(...)" exists. You will use it in this way...

Code:
var
  Encoding: TEncoding;
  Buffer: TArray<Byte>;
begin
  Encoding := TEncoding.GetEncoding(852);
  try
    Buffer := Encoding.GetBytes(‘Hello‘);
    (...)
  finally
    Encoding.Free();  <- must have
  end;
end;

Note: You need to destroy such instances by your own. In case you use often the same code page, just use a global variable, otherwise use it like any other class too.


The class TNetEncoding has the same schema as TEncoding is using. It is an abstract class which offers with the properties Base64, HTML and URL certain encoder. Even the class TBase64Encoding has an overloaded constructor, which allows to tweak the output. In the example below is the "LineSeparator" empty and therefore the output has not line breaks, which is far away from what default behaviour offers.

Code:
class function TEncodingUtils.BytesToBase64(Buffer: PByte; const Offset, Count: Integer): string;
var
  Encoder: TBase64Encoding;
  Input: PByte;
begin
  Encoder := TBase64Encoding.Create(MaxInt, ‘‘);
  try
    Input := Buffer;
    Inc(Input, Offset);
    Result := Encoder.EncodeBytesToString(Input, Count);
  finally
    Encoder.Free();
  end;
end;

https://www.board4allcz.eu/showthread.php?t=634856

TEncoding & TNetEncoding(使用现成的TBase64Encoding,TEncoding和TMBCSEncoding)

标签:

原文地址:http://www.cnblogs.com/findumars/p/5745256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!