diff options
Diffstat (limited to 'packages/fcl-json/src/jsonscanner.pp')
-rw-r--r-- | packages/fcl-json/src/jsonscanner.pp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/packages/fcl-json/src/jsonscanner.pp b/packages/fcl-json/src/jsonscanner.pp index ccac0f089a..8f74ed130c 100644 --- a/packages/fcl-json/src/jsonscanner.pp +++ b/packages/fcl-json/src/jsonscanner.pp @@ -51,7 +51,7 @@ type EScannerError = class(EParserError); - TJSONOption = (joUTF8,joStrict,joComments,joIgnoreTrailingComma,joIgnoreDuplicates); + TJSONOption = (joUTF8,joStrict,joComments,joIgnoreTrailingComma,joIgnoreDuplicates,joBOMCheck); TJSONOptions = set of TJSONOption; Const @@ -141,10 +141,26 @@ end; constructor TJSONScanner.Create(Source: TStream; AOptions: TJSONOptions); + procedure SkipStreamBOM; + Var + OldPos : integer; + Header : array[0..3] of byte; + begin + OldPos := Source.Position; + FillChar(Header, SizeOf(Header), 0); + if Source.Read(Header, 3) = 3 then + if (Header[0]=$EF) and (Header[1]=$BB) and (Header[2]=$BF) then + exit; + Source.Position := OldPos; + end; + + Var S : RawByteString; begin + if (joBOMCheck in aOptions) then + SkipStreamBom; S:=''; SetLength(S,Source.Size-Source.Position); if Length(S)>0 then |