fix, JSON loader, skip BOM

This commit is contained in:
Basile Burg 2015-09-22 12:56:52 +02:00
parent 2ae5fe3b01
commit 92ba1bcdfa
1 changed files with 15 additions and 1 deletions

View File

@ -153,14 +153,28 @@ procedure TCEDubProject.loadFromFile(const aFilename: string);
var var
loader: TMemoryStream; loader: TMemoryStream;
parser : TJSONParser; parser : TJSONParser;
bom: dword = 0;
begin begin
loader := TMemoryStream.Create; loader := TMemoryStream.Create;
try try
fBasePath := extractFilePath(aFilename); fBasePath := extractFilePath(aFilename);
fFilename := aFilename; fFilename := aFilename;
loader.LoadFromFile(fFilename); loader.LoadFromFile(fFilename);
// skip BOM, this crashes the parser
loader.Read(bom, 4);
if (bom and $BFBBEF) = $BFBBEF then
loader.Position:= 3
else if bom = $FFFE0000 then
loader.Position:= 4
else if bom = $FEFF then
loader.Position:= 4
else if (bom and $FEFF) = $FEFF then
loader.Position:= 2
else if (bom and $FFFE) = $FFFE then
loader.Position:= 2;
//
fJSON.Free; fJSON.Free;
parser := TJSONParser.Create(loader); parser := TJSONParser.Create(loader, false);
try try
fJSON := parser.Parse as TJSONObject; fJSON := parser.Parse as TJSONObject;
finally finally