Results 1 to 9 of 9

Thread: Utd8Decode (freepascal vs Delphi)

  1. #1

    Utd8Decode (freepascal vs Delphi)

    FreePascal lijkt anders om te gaan met Utf8Decode dan Delphi (in ieder geval anders dan D7).
    Wat is de output van onderstaand programma op een moderne Delphi?

    Delphi Code:
    1. program u;
    2.  
    3.  
    4. {$apptype console}
    5. {$assertions on}
    6. {$ifdef fpc}
    7. {$codepage cp1252}
    8. {$mode objfpc}
    9. {$h+}
    10. {$endif fpc}
    11.  
    12. uses
    13.   SysUtils;
    14.  
    15. {$ifndef fpc}
    16. type
    17.   UnicodeString = WideString;
    18. {$endif}
    19.  
    20. var
    21.   AStr: AnsiString;
    22.   UStr: UnicodeString;
    23.  
    24. begin
    25.   AStr := 'äëï';
    26.   Assert((Byte(AStr[1])=$E4) and (Byte(AStr[2])=$EB) and (Byte(AStr[3])=$EF),'AStr is not singlebyte encoded.');
    27.   UStr := Utf8Decode(AStr);
    28.   writeln('Length(UStr)=',Length(UStr));
    29. end.

    Delphi 7: Length(UStr)=0
    fpc: Length(UStr)=3

    De type definitie van UnicodeString is wellicht overbodig in modernere Delphi's?
    Die assert is om te checken of mijn editor niet per ongeluk de broncode toch als UTF-8 heeft opgslagen.

    Bart

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,352
    Delphi2007 (niet echt "Modern", maar iets moderner) geeft ook:
    Code:
    Length(UStr)=0
    TMemoryLeak.Create(Nil);

  3. #3
    Delphi 10.1 Berlin
    Length(UStr)=3

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,352
    Ik verwacht dat het goed gaat na D2009, dus als iemand die versie heeft draaien...
    TMemoryLeak.Create(Nil);

  5. #5
    B.T.W. Length(Utf8String('1¢')) geeft 3 in Delphi 10.1 Berlin
    (en 5 in Lazarus 2.0)

  6. #6
    Quote Originally Posted by rvk View Post
    Delphi 10.1 Berlin
    Length(UStr)=3
    Ik neem aan dat UStr alleen vraagtekens bevat dan, aangezien AStr geen juist gecodeerde UTF8 bevat?

    Bart

  7. #7
    Delphi 10.1 Berlin:
    Length(UStr)=3
    UStr=???

  8. #8
    En:
    Delphi Code:
    1. var
    2.   AStr: AnsiString;
    3.   UStr: UnicodeString;
    4. begin
    5.   AStr := 'äëï';
    6.   Assert((Byte(AStr[1])=$E4) and (Byte(AStr[2])=$EB) and (Byte(AStr[3])=$EF),'AStr is not singlebyte encoded.');
    7.  
    8.   UStr := Utf8Decode(AStr);
    9.   writeln('Length(UStr)=',Length(UStr));
    10.   writeln('UStr=',UStr);
    11.  
    12.   UStr := Utf8String(AStr);
    13.   writeln('Length(UStr)=',Length(UStr));
    14.   writeln('UStr=',UStr);

    Length(UStr)=3
    UStr=???
    Length(UStr)=3
    UStr=äëï

  9. #9
    Bedankt voor het testen allemaal.

    Bart

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •