@@ -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} , varUString { $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