Results 1 to 11 of 11

Thread: Weergeven karakter 169

  1. #1

    Weergeven karakter 169

    Hallo,

    Waarom gaat dit niet goed? De bedoeling is dat karakter 169 wordt weergegeven (karakter 169 = copyright karakter).
    Hoe lossen we dit op?

    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    Var
      Ch : Char;
      Str : String;
    begin
      Ch:=Chr(169);    // 169#169
      Str := Chr(169); // #169
    end;

    Met een vriendelijke groet Frans

  2. #2
    Dat werkt toch gewoon. Je laat ook helemaal niet zien wat je met Ch of Str doet.

    Het hangt n.l. ook van de font af waarmee je de tekst zichtbaar gaat maken.

    Je kunt natuurlijk ook gewoon dit doen

    Str := '©';

    (Copyright karakter is ALT+0169)

    Dit werkt bij mij prima.
    Delphi Code:
    1. procedure TForm1.FormCreate(Sender: TObject);
    2. begin
    3.   Caption := Chr(169);
    4. end;
    En dit ook:
    Delphi Code:
    1. procedure TForm1.FormCreate(Sender: TObject);
    2. begin
    3.   Caption := '©';
    4. end;

  3. #3
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Soms helpt ook #$00A9. De voorloop nullen forceren een 16-bits litetal char.

  4. #4
    L.S.

    Rik oplossing die jij aangeeft werkt wel in Delphi 7 maar niet in Lazarus
    Marcov deze oplossing werk in Delphi 7 en Lazarus

    H.G. Frans

  5. #5
    O, ik zag even niet dat we in het Lazarus subforum zaten.

    Maar Caption := '©'; werkt bij mij op Lazarus 1.8.2 ook prima hoor.
    Welke Lazarus versie gebruik je?

    Caption := Chr(169) werkt inderdaad niet.
    Volgens mij omdat Lazarus af en toe nog een beetje raar werkt met UTF-8.

  6. #6
    Chr(169) is een ongeldige UTF8 tekenreeks.
    Alle strings in Lazarus zijn UTF8 by default.
    WinCPToUtf8(Chr(169)) werkt wel.
    De Lazarus editor is UTF8 dus Caption := '©' werkt prima.

    De encoding van je bestand op cp1252 zetten en dan {$codepage 1252} in je broncode opnemen, zou op theoretische gronden moeten werken...

    Bart

  7. #7
    Quote Originally Posted by Bart B View Post
    Chr(169) is een ongeldige UTF8 tekenreeks.
    ???

    Wat is dan de geldige manier om met chr() het copyright-teken te krijgen?
    Want dat zou toch wel mogelijk moeten zijn.
    Chr geeft een char (utf8 neem ik aan) dus je zou toch ook direct het copyright teken moeten kunnen produceren in utf8 zonder via WinCPToUtf8 te gaan.

    (Of produceert chr() geen utf8?)

    http://www.fileformat.info/info/unic...r/a9/index.htm

  8. #8
    O, ik denk dat ik het al zie.
    Ik kan het niet testen maar het zou dus dit moeten zijn.

    Caption := Chr($c2a9);

    Want 0xC2 0xA9 zou dus wel een geldige tekenreeks in utf8 zijn.

    Zie http://www.fileformat.info/info/unic...r/a9/index.htm

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    En dus

    Caption:=#$00A9

    omdat dat een widechar notatie is (UTF-16) en een utf16->utf8 conversie (compile time denk) triggered.

  10. #10
    Mmm, er is dus in FreePascal geen mogelijkheid om direct een UTF-8 copyright karakter in een Char te krijgen zonder die conversie en zonder het teken direct te tikken in de editor?

    Want dit: Chr($c2a9) werkt ook niet omdat Chr() alleen maar 0..255 accepteert.

    Edit: O, ik heb hem al. Het moet Caption := #$c2#$a9; zijn

  11. #11
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Nee want een char kan geen utf8 teken >127 bevatten. Een van de nadelen van UTF8, zelfs relatief simpele tekens worden multibyte.

    Alles is een conversie. Die dollar notatie moet ook geconverteerd worden. Zolang het maar in de compiler gebeurt, en geen invloed heeft op de gegenereerde code.

    De gegenereerde code produceert voor het label (dat direct aan "assign" wordt doorgegeven):

    Delphi Code:
    1. section .rodata.n__$PROGRAM$_Ld1,"d"
    2.     .balign 4
    3.     .short  65001,1
    4.     .long   -1,2
    5. .globl  _$PROGRAM$_Ld1
    6. _$PROGRAM$_Ld1:
    7.     .ascii  "\302\251\000"

    \302 is octaal voor $C2 en \251 is $A9 en \000 is de terminerende null. De -1 is de refcount (negatief voor constanten) en 2 is de lengte. 65001 is de encoding. De ",1" daarachter is de element size (staat helpers toe te delen tussen 1 en 2-byte strings)

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
  •