[Lazarus] [fpc-pascal] Tests results of several pascal based JSON parsers
Michael Van Canneyt
michael at freepascal.org
Sat Aug 31 09:45:47 CEST 2019
On Sat, 31 Aug 2019, Anthony Walter via lazarus wrote:
> Michael, regarding this unicode problem, all the code has already been
> posted in this thread.
>
> program Test;
>
> uses
> FPJson, JsonParser, JsonTools;
There you are. You're missing the cwstring unit and the codepage directive.
Change the above code to
{$mode objfpc}
{$h+}
{$codepage utf8}
uses
{$IFDEF UNIX}cwstring, {$ENDIF} FPJson, JsonParser, JsonTools;
and it will work correctly.
(The objpas and $h+ are probably in your fpc.cfg or lazarus setup)
Your program will only work correctly in a utf8-only environment.
(see also below)
But fpJSON relies on the fpc infrastructure to handle all codepages, as a
consequence this infrastructure also must be set up properly.
Now you can see why I insisted on using my program, it was known to work
correctly: it sets up things properly. If you look at my initial mail,
you'll also see that I explicitly mentioned including cwstring.
You probably failed to pick up on that important piece of info.
So, mystery solved.
That said :
Unfortunately JSONTools is also not without problems.
I copied the program to a windows VM.
Attached screenshot of the output.
As you can see, jsontools also does not work correctly.
It's no mystery why not. I had to add
DefaultSystemCodePage:=CP_UTF8;
as the first line in the program, then it does show TRUE for both tests.
Now, if you work in lazarus, it does this for you, so you don't notice/know it.
Codepages & strings require careful setup. Contrary to popular belief, it does not 'just work'.
All this is documented:
https://www.freepascal.org/docs-html/current/ref/refsu9.html#x32-390003.2.4
Many people tend to ignore this, because Lazarus does a lot behind the scenes
(which is a good thing).
But if people use your JSONTools in a 'mixed' environment, you might
get strange results, if you ignore the correct and careful setup.
You control your environment, and jsontools will function correctly in your
environment. But it's a big world out there, where things might be happening
that you didn't foresee but which do influence jsontools.
I hope with my explanations, you are now well equipped/informed to strengthen
jsontools and help people should problems nevertheless pop up.
Now that we've hopefully established that fpjson does work correctly,
I would appreciate it if you could correct the JSON test comparison page you created.
Michael.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jsontools.png
Type: image/png
Size: 8535 bytes
Desc:
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20190831/9e88b4fa/attachment-0001.png>
More information about the lazarus
mailing list