All functions of the JSON API expect and return UTF-8 strings. Therefore, the functions JsonParse, JsonSetStringProperty, and JsonArraySetStringElement expect the values in UTF-8 representation. Accordingly, the functions JsonToText, JsonGetStringProperty, and JsonArrayGetStringElement deliver the values in UTF-8 encoding.
To convert ANSI strings to UTF-8 strings and vice versa, you can use the functions ToUTF8 and FromUTF8.
If there are no special characters (for example ©, ¥, £, ä, ö, ü) in the text, all JSON API functions convert the ANSI string to an UTF-8 string implicitly. Otherwise an explicit conversion is required.
It is recommended to convert ANSI strings to UTF-8 strings in any case.
Encoding rules for all JSON API functions:
| Input | Output | FromUTF8 (Output) |
|---|---|---|
| ToUTF8("CYL") | CYL | CYL |
| ToUTF8("©¥£") | ©¥£ | ©¥£ |
| ToUTF8("©¥£") | ©¥£ | ©¥£ |
| CYL | CYL | CYL |
| ©¥£ | ©¥£ | Error: string conversion failed |
| ©¥£ | ©¥£ | ©¥£ |
JsonParse decodes UTF-8 characters automatically.
Additional encoding rules for JsonParse:
| Input | Output | FromUTF8 (Output) |
|---|---|---|
| ToUTF8( " \u00A9\u00A5\u00A3") | ©¥£ | ©¥£ |
| \u00A9\u00A5\u00A3 | ©¥£ | ©¥£ |
You do not need to convert texts without special characters.
transaction TMain
var
jsonText, jsonResult : string;
jsonArray : number;
begin
jsonText := "[
\"CYL\",
\"©¥£\"
]";
jsonArray := JsonParse(jsonText);
JsonToText(jsonArray, jsonResult);
Print(“UTF8: “ + jsonResult);
Print(“ANSI: “ + FromUTF8(jsonResult));
JsonFree(jsonArray);
End Tmain;
Output:
UTF8: [“CYL”,“©¥£”] ANSI: [“CYL”,“©¥£”]
If a text contains a special character and you try to convert it to ANSI, an error occurs.
transaction TMain
var
jsonText, jsonResult : string;
jsonArray : number;
begin
jsonText := "[
\"CYL\",
\"©¥£\"
\"©¥£\"
]";
jsonArray := JsonParse(jsonText);
JsonToText(jsonArray, jsonResult);
Print(“UTF8: “ + jsonResult);
Print(“ANSI: “ + FromUTF8(jsonResult));
JsonFree(jsonArray);
End Tmain;
Output:
UTF8: [“CYL”,“©¥£”,“©¥£”] Error: String conversion failed
When the input text is converted to UTF-8, everything works as expected:
transaction TMain
var
jsonText, jsonResult : string;
jsonArray : number;
begin
jsonText := "[
\"CYL\",
\"©¥£\",
\"©¥£\"
]";
jsonArray := JsonParse(jsonText);
JsonToText(jsonArray, jsonResult);
Print(“UTF8: “ + jsonResult);
Print(“ANSI: “ + FromUTF8(jsonResult));
JsonFree(jsonArray);
End Tmain;
Output:
UTF8: [“CYL”,“©¥£”,“ ©¥£”] ANSI: [“CYL”,“©¥£”,“ ©¥£”]