mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 08:51:10 +02:00
* Fix reading of UTF-8 data
git-svn-id: trunk@34492 -
This commit is contained in:
parent
d19bf787a0
commit
356395beaa
@ -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));
|
||||||
else
|
//S:=UTF8Encode(SW);
|
||||||
s:='';
|
|
||||||
end;
|
end;
|
||||||
if s <> '' then
|
dtBinary : SW:=BufToHex(Data,DataSize);
|
||||||
|
else
|
||||||
|
sw:='';
|
||||||
|
end;
|
||||||
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user