1. 7 months ago

    Roger C

    23 Apr 2019 Montréal, Québec, Canada
    Edited 7 months ago

    Bonjour,

    La fonction suivante fait la concaténation d'une chaîne de caractères sur un MemoryBlock.

    Method: AppendString(s As String)

     Dim l As Integer
      l = Len(s)
      mb.StringValue(Length, l) = s
      Length = Length + l

    Lorsque je lis le contenu du MemoryBlock par la fonction suivante:

    Return mb.StringValue(0, Length)

    les accents sont représentés par les caractères ?

    @Stéphane - La solution était en effet de remplacer Len par LenB. Merci.

  2. Norman P

    23 Apr 2019 Pre-Release Testers, Xojo Pro Outside Innisfail
    Edited 7 months ago

    Lorsque vous lisez la chaîne à partir de memorybloick, assurez-vous de définir le codage (voir DefineEncoding dans l'aide).

    return DefineEncoding (mb.StringValue (0, Length), Encodings.UTF8)

    EDIT - copy & paste from translate.google.com :P

    EDIT 2 : see https://blog.xojo.com/2013/08/20/why-are-there-diamonds-in-my-user-interface/

  3. Roger C

    23 Apr 2019 Montréal, Québec, Canada

    Bonjour Norman,

    I'm still getting the same results.

    I'm using the AppendString method to build a HTML page. Since the accents are not being rendered correctly most of the HTML tags are missing. When I use Encodings.ASCII, page is rendered correctly with the appropriante styles but without accents.

    Regards,
    Roger.

  4. @Roger C — Les chaînes (string) en Xojo sont encodées en UTF-8, c'est-à-dire que chaque caractère prend entre 1 et 4 octets. Pour obtenir la taille en nombre de caractère, il faut utiliser Len. En revanche, pour obtenir la taille en nombre d'octets, il faut utiliser LenB.

    Pour un MemoryBlock (qui lit/écrit en mémoire octet par octet), la "taille" est toujours exprimées en nombre d'octets et pas en nombre de caractères. Donc ta fonction "AppendString" devrait uniquement utiliser des "LenB" et pas des "Len".

    Mais Norman a également raison. Si le contenu de ton MemoryBlock a été construit à partir de Strings en UTF-8, il faut aussi relire ces données depuis ton MemoryBlock avec le bon encodage

  5. Roger C

    23 Apr 2019 Montréal, Québec, Canada

    Bonjour Stéphane,

    Est-ce que je dois également définir l'encodage sur les champs qui sont lus d'une base de données SQLITE avant de faire appel à la fonction AppendString ?

  6. @Roger C — Xojo n'utilise que des Strings en UTF-8 par défaut. Si tu as créé ta base de données depuis Xojo, toutes les Strings devraient être en UTF-8. C'est beaucoup plus compliqué si la base de données vient d'ailleurs parce qu'il y a plein de réglages différents.

  7. Roger C

    23 Apr 2019 Answer Montréal, Québec, Canada
    Edited 7 months ago

    @Stéphane - La solution était en effet de remplacer Len par LenB. Merci.

or Sign Up to reply!