* Fix reading of UTF-8 data

git-svn-id: trunk@34492 -
This commit is contained in:
michael 2016-09-10 18:34:02 +00:00
parent d19bf787a0
commit 356395beaa

View File

@ -294,7 +294,7 @@ Var
Node : TDomElement; Node : TDomElement;
DataNode : TDomNode; DataNode : TDomNode;
ND : Integer; ND : Integer;
S : AnsiString; S : UTF8String;
HasData: Boolean; HasData: Boolean;
IntValue: Integer; IntValue: Integer;
begin begin
@ -322,7 +322,7 @@ begin
dtString : begin // DataNode is optional dtString : begin // DataNode is optional
if HasData then if HasData then
begin begin
S:=DataNode.NodeValue; // Convert to ansistring S:=UTF8Encode(DataNode.NodeValue); // Convert to ansistring
DataSize:=Length(S); DataSize:=Length(S);
if (DataSize>0) then if (DataSize>0) then
Move(S[1],Data,DataSize); Move(S[1],Data,DataSize);
@ -353,7 +353,7 @@ Type
Var Var
Node : TDomElement; Node : TDomElement;
DataNode : TDomNode; DataNode : TDomNode;
S : String; SW : Widestring;
begin begin
Node:=FindValueKey(Name); Node:=FindValueKey(Name);
If Node=Nil then If Node=Nil then
@ -365,23 +365,26 @@ begin
DataNode:=Node.FirstChild; DataNode:=Node.FirstChild;
Case DataType of Case DataType of
dtDWORD : S:=IntToStr(PCardinal(@Data)^); dtDWORD : SW:=IntToStr(PCardinal(@Data)^);
dtString : SetString(S, PAnsiChar(@Data), DataSize); dtString : begin
dtBinary : S:=BufToHex(Data,DataSize); SW:=WideString(PAnsiChar(@Data));
//S:=UTF8Encode(SW);
end;
dtBinary : SW:=BufToHex(Data,DataSize);
else else
s:=''; sw:='';
end; end;
if s <> '' then if sw <> '' then
begin begin
if DataNode=nil then if DataNode=nil then
begin begin
// may happen if previous value was empty; // may happen if previous value was empty;
// XML does not handle empty textnodes. // XML does not handle empty textnodes.
DataNode:=FDocument.CreateTextNode(s); DataNode:=FDocument.CreateTextNode(sw);
Node.AppendChild(DataNode); Node.AppendChild(DataNode);
end end
else else
DataNode.NodeValue:=s; DataNode.NodeValue:=sw;
end end
else else
DataNode.Free; DataNode.Free;
@ -613,7 +616,7 @@ begin
begin begin
DN:=N.FirstChild; DN:=N.FirstChild;
if Assigned(DN) and (DN.NodeType=TEXT_NODE) then begin if Assigned(DN) and (DN.NodeType=TEXT_NODE) then begin
S := DN.NodeValue; S := UTF8Encode(DN.NodeValue);
L:=Length(S); L:=Length(S);
end else end else
L:=0; L:=0;
@ -666,7 +669,7 @@ begin
Case TDataType(StrToIntDef(TDomElement(Node)[SType],0)) of Case TDataType(StrToIntDef(TDomElement(Node)[SType],0)) of
dtUnknown : L:=0; dtUnknown : L:=0;
dtDWord : L:=4; dtDWord : L:=4;
DtString : L:=Length(DataNode.NodeValue); DtString : L:=Length(UTF8Encode(DataNode.NodeValue));
dtBinary : L:=Length(DataNode.NodeValue) div 2; dtBinary : L:=Length(DataNode.NodeValue) div 2;
end end
else else