Memory Block

Bonjour,

La fonction suivante fait la concatnation d’une chane de caractres 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 reprsents par les caractres ?

Lorsque vous lisez la chane partir de memorybloick, assurez-vous de dfinir le codage (voir DefineEncoding dans l’aide).

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

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

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

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.

@Roger Champagne — 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

Bonjour Stphane,

Est-ce que je dois galement dfinir l’encodage sur les champs qui sont lus d’une base de donnes SQLITE avant de faire appel la fonction AppendString ?

@Roger Champagne — 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.

@Stphane - La solution tait en effet de remplacer Len par LenB. Merci.