1. 8 weeks ago

    Roger C

    Apr 23 Montréal, Québec, Canada
    Edited 8 weeks 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 ?

    @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

  2. Norman P

    Apr 23 Pre-Release Testers, Xojo Pro great-white-software.com
    Edited 8 weeks 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

    Apr 23 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. Stéphane M

    Apr 23 Answer France

    @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

    Apr 23 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

    Apr 23 Montréal, Québec, Canada
    Edited 8 weeks ago

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

or Sign Up to reply!