Browse Source

Base64: UnicodeRTL support

Ondrej Pokorny 8 months ago
parent
commit
63a2a4d9e7
2 changed files with 18 additions and 6 deletions
  1. 9 3
      packages/fcl-base/src/base64.pp
  2. 9 3
      packages/vcl-compat/src/system.netencoding.pp

+ 9 - 3
packages/fcl-base/src/base64.pp

@@ -42,7 +42,7 @@ type
     TWriteBufferLength = 1..4;
   protected
     CharsPerLine: Integer;
-    LineSeparator: string;
+    LineSeparator: RawByteString;
     PadEnd: Boolean;
 
     TotalBytesProcessed, BytesWritten: LongWord;
@@ -53,7 +53,8 @@ type
     procedure DoWriteBuf(var Buffer: TWriteBuffer; BufferLength: TWriteBufferLength);
   public
     constructor Create(ASource: TStream); overload;
-    constructor Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: string; APadEnd: Boolean); overload;
+    constructor Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: RawByteString; APadEnd: Boolean); overload;
+    constructor Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: UnicodeString; APadEnd: Boolean); overload;
     destructor Destroy; override;
     Function Flush : Boolean;
     function Write(const Buffer; Count: Longint): Longint; override;
@@ -181,7 +182,7 @@ begin
   Create(ASource, 0, '', True);
 end;
 
-constructor TBase64EncodingStream.Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: string; APadEnd: Boolean);
+constructor TBase64EncodingStream.Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: RawByteString; APadEnd: Boolean);
 begin
   inherited Create(ASource);
 
@@ -190,6 +191,11 @@ begin
   PadEnd := APadEnd;
 end;
 
+constructor TBase64EncodingStream.Create(ASource: TStream; ACharsPerLine: Integer; ALineSeparator: UnicodeString; APadEnd: Boolean);
+begin
+  Create(ASource, ACharsPerLine, UTF8Encode(ALineSeparator), APadEnd);
+end;
+
 destructor TBase64EncodingStream.Destroy;
 begin
   Flush;

+ 9 - 3
packages/vcl-compat/src/system.netencoding.pp

@@ -103,7 +103,7 @@ type
     kLineSeparator = #13#10;
   protected
     FCharsPerline: Integer;
-    FLineSeparator: string;
+    FLineSeparator: UnicodeString;
     FPadEnd: Boolean;
   protected
     Function DoDecode(const aInput, aOutput: TStream): Integer; overload; override;
@@ -122,7 +122,8 @@ type
   public
     constructor Create; overload; virtual;
     constructor Create(CharsPerLine: Integer); overload; virtual;
-    constructor Create(CharsPerLine: Integer; LineSeparator: string); overload; virtual;
+    constructor Create(CharsPerLine: Integer; LineSeparator: UnicodeString); overload; virtual;
+    constructor Create(CharsPerLine: Integer; LineSeparator: RawByteString); overload;
   end;
 
   { TBase64StringEncoding }
@@ -291,7 +292,7 @@ begin
   Create(CharsPerLine, kLineSeparator);
 end;
 
-constructor TBase64Encoding.Create(CharsPerLine: Integer; LineSeparator: string);
+constructor TBase64Encoding.Create(CharsPerLine: Integer; LineSeparator: UnicodeString);
 begin
   inherited Create;
   FCharsPerline:=CharsPerLine;
@@ -299,6 +300,11 @@ begin
   FPadEnd:=True;
 end;
 
+constructor TBase64Encoding.Create(CharsPerLine: Integer; LineSeparator: RawByteString);
+begin
+  Create(CharsPerLine, UTF8Decode(LineSeparator));
+end;
+
 constructor TBase64Encoding.Create;
 begin
   Create(kCharsPerLine, kLineSeparator);