Results 1 to 2 of 2

Thread: "backslash-escaped unicode" - hoe?

  1. #1

    Question "backslash-escaped unicode" - hoe?

    (Delphi 7)

    We hebben een koppeling met een extern systeem waarmee we middels een JSON message gegevens aanleveren. Deze wordt als normale string opgebouwd (dus als ansiChar). De gegevens - met name strings) komen uit een eigen database - waarin gegevens als ansichar (dus 1 byte / karakter) zijn vastgelegd.
    Voor de connectie maak ik gebruik van WinInet functies; er wordt geen conversie naar Unicode of UTF-8 gedaan i het programma zelf; het kan zijn dat WinInet onder de motorkap zoiets doet, maar daar heb ik geen zicht op.
    Dit gaat op zich goed - maar nu blijkt dat er toch 'onjuiste' karakters voorkomen en de ontvangende service kan daar niet mee overweg; gevraagd wordt om 'backslash-escaped unicode' - vraag me niet waarom geen UTF-8 (misschien bedoelen ze dat?? Die fout wordt wel vaker gemaakt. Hoe dan ook, het gaat om een Windows -> Windows omgeving, en beide zouden met unicode om moeten kunnen ); maar hoe krijg ik zoiets voor elkaar? Ik heb al wat gevonden om (ansi)string om te zetten naar UTF-8; als (ansi)string naar WideString wordt omgezet is er toch sprake van unicode. Maar hoe een en ander om te zetten naar het gevraagde formaat?

    (De suggestie om een andere database te gebruiken (al dan niet 'off-the-shelf') ken ik, ook update naar een nieuwere Delphi versie. Geen van beide is aan de orde.)

    Wie heeft er een suggestie?

    Willem

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    HTML heeft een escape \uxxxx waarbij xxxx geloof ik de hexwaarde van het (BMP?) codepoint (character?) is.

    Best kan je naar widestring converteren, en dan iets van

    Code:
    // niet geoptimalizeerd, geen surrogates etc)
    var mywidestringin, mywidestringsout : widestring;
    
    begin
       mywidestringin:=utf8decode(someutf8string);  // of hoe anders je je string naar widestring omzet
       mywidestringout:='';
      for i:=1 to length(mywidestringin) do
         if word(mywidestringin[i])>=128 then
            mywidestringout:=mywidestringout+'\u'+inttohex(word(mywidestringin[j]),4)
         else
            mywidestringout:=mywidestringout+mywidestringin[j];

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
  •