Effet magique de l'unité LConvEncoding
Bonjour !
Je poste cette question dans le sous-forum Free Pascal, parce que j'utilise l'unité LConvEncoding de Lazarus dans une application console compilée directement par Free Pascal.
J'étais en train de faire des recherches sur l'encodage du symbole euro (€) et sur la variable FormatSettings.CurrencyString.
J'ai observé quelque chose que je ne m'explique pas, à savoir que le simple fait de déclarer l'unité LConvEncoding en tête de mon programme a un effet que l'exemple suivant met en évidence.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| {$ASSERTIONS ON}
{.$DEFINE USELCONVENCODING}
uses
sysutils
{$IFDEF USELCONVENCODING}
, lconvencoding
{$ENDIF}
;
begin
{$IFDEF USELCONVENCODING}
Assert(Length(FormatSettings.CurrencyString) = 3);
//Assert(FormatSettings.CurrencyString = #8364); // Warning: Implicit string type conversion from "AnsiString" to "WideString"
Assert(FormatSettings.CurrencyString = AnsiString(#8364));
{$ELSE}
Assert(Length(FormatSettings.CurrencyString) = 1);
//Assert(FormatSettings.CurrencyString = #128); // Assertion failed
Assert(FormatSettings.CurrencyString[1] = #128);
{$ENDIF}
WriteLn('ok');
ReadLn;
end. |
Sauriez-vous comment le simple fait de déclarer l'unité peut produire cet effet ? Et quel est cet effet justement ? :roll:
Question subsidiaire, pourquoi l'assertion FormatSettings.CurrencyString = #128 échoue-t-elle ?
Je me sers pour compiler mon programme (c'est sous Windows) du script suivant :
Code:
1 2 3 4 5 6
| set ver=3.0.2
set path=c:\fpc\%ver%\bin\i386-win32
if not exist .\units md .\units
fpc.exe -Mdelphi -Fuc:\lazarus\components\lazutils -FU.\units %1 |