@@ -200,6 +200,7 @@   TPythonData = class(TObject)
200200    procedure  SetPyObject (const  Value : PPyObject);
201201    function  GetAsVariant : Variant;
202202    function  GetAsWideString : UnicodeString;
203+     function  GetAsAnsiString : AnsiString;
203204  public 
204205    constructor  Create(AObject : PPyObject); overload;
205206    constructor  Create(AObject : PPyObject; APythonAtomCompatible : Boolean); overload;
@@ -233,6 +234,7 @@   TPythonData = class(TObject)
233234
234235    //  conversion
235236    property  AsString: String read GetAsString;
237+     property  AsAnsiString: AnsiString read GetAsAnsiString;
236238    property  AsVariant: Variant read GetAsVariant;
237239    property  AsWideString: UnicodeString read GetAsWideString;
238240
@@ -828,7 +830,12 @@ procedure TPythonVariantType.CastTo(var Dest: TVarData;
828830      varOleStr { $IFDEF UNICODE} { $ENDIF} 
829831        VarDataFromOleStr(Dest, TPythonVarData(Source).VPython.AsWideString);
830832      varString:
833+         { $IFDEF UNICODE} 
834+         //  Preserve AnsiStrings
835+         VarDataFromLStr(Dest, TPythonVarData(Source).VPython.AsAnsiString);
836+         { $ELSE} 
831837        VarDataFromStr(Dest, TPythonVarData(Source).VPython.AsString);
838+         { $ENDIF} 
832839    else 
833840      if  AVarType and  varTypeMask = varBoolean then 
834841      begin 
@@ -2177,6 +2184,14 @@ function TPythonData.Equal(const Right: TPythonData): Boolean;
21772184  end ; //  of with
21782185end ;
21792186
2187+ function  TPythonData.GetAsAnsiString : AnsiString;
2188+ begin 
2189+   if  Assigned(PyObject) and  GetPythonEngine.PyString_CheckExact(PyObject) then 
2190+     Result := GetPythonEngine.PyString_AsString(PyObject)
2191+   else 
2192+     result := GetAsString;
2193+ end ;
2194+ 
21802195function  TPythonData.GetAsString : String;
21812196begin 
21822197  if  Assigned(PyObject) then 
0 commit comments