Skip to content

Commit 12a9fd7

Browse files
author
pyscripter
committed
Issue 19
1 parent b487245 commit 12a9fd7

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

PythonForDelphi/Components/Sources/Core/PythonEngine.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,7 +2241,7 @@ TPythonEngine = class(TPythonInterface)
22412241
function PyTZInfo_Check( obj : PPyObject ) : Boolean;
22422242
function PyTZInfo_CheckExact( obj : PPyObject ) : Boolean;
22432243
{ end date/time functions }
2244-
function PyString_FromString( str: PAnsiChar): PPyObject; override;
2244+
function PyString_FromString( str: PAnsiChar): PPyObject; override;
22452245
function PyString_AsDelphiString( ob: PPyObject): string; override;
22462246
function PyString_AsAnsiString( ob: PPyObject): AnsiString;
22472247
function PyString_AsWideString( ob: PPyObject): UnicodeString;
@@ -5753,13 +5753,13 @@ function TPythonEngine.VariantAsPyObject( const V : Variant ) : PPyObject;
57535753
Result := PyUnicode_FromWideChar( PWideChar(wStr), Length(wStr) );
57545754
{$ELSE}
57555755
s := wStr;
5756-
Result := PyString_FromString( PAnsiChar(s) );
5756+
Result := PyString_FromStringAndSize(PAnsiChar(s), Length(s));
57575757
{$ENDIF}
57585758
end;
57595759
varString:
57605760
begin
57615761
s := AnsiString(DeRefV);
5762-
Result := PyString_FromString( PAnsiChar(s) );
5762+
Result := PyString_FromStringAndSize(PAnsiChar(s), Length(s));
57635763
end;
57645764
{$IFDEF UNICODE}
57655765
varUString:
@@ -5769,7 +5769,7 @@ function TPythonEngine.VariantAsPyObject( const V : Variant ) : PPyObject;
57695769
Result := PyUnicode_FromWideChar( PWideChar(wStr), Length(wStr) );
57705770
{$ELSE}
57715771
s := wStr;
5772-
Result := PyString_FromString( PAnsiChar(s) );
5772+
Result := PyString_FromStringAndSize(PAnsiChar(s), Length(s));
57735773
{$ENDIF}
57745774
end;
57755775
{$ENDIF}

PythonForDelphi/Components/Sources/Core/VarPyth.pas

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
21782185
end;
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+
21802195
function TPythonData.GetAsString: String;
21812196
begin
21822197
if Assigned(PyObject) then

0 commit comments

Comments
 (0)