Seite 2 von 2
Verfasst: 23.09.2006 11:45
von Zaphod
Das ist ebenfalls nicht 100%ig richtig. Bei UTF-8 ist ein zeichen solange 1byte groß, solange es aus dem ascii bereich kommt. Ist es nicht im ascii enthalten, dann ist es 2byte groß.
Das macht die größeneinschätzung ein wenig komplizierter, weil man nicht einfach die bytes zählen kann um festzustellen, aus wievielen zeichen ein string besteht. Len() macht das aber zum glück selbstständig.
Verfasst: 23.09.2006 12:03
von ts-soft
PB unterstützt ja in dem Sinne kein UTF-8. Die normale Stringverwaltung
benutzt entweder ANSI oder Unicode, je nach Compilereinstellung. Lediglich
Konvertierungsmöglichkeiten für UTF-8 sind vorhanden. Desweiteren kann
die IDE UTF-8 nutzen, so das den Strings bei Unicode-Compilierung nichts
verloren geht.
Mit anderen Worten, PB-Strings enthalten entweder Ansi-Strings oder
Unicode-Strings.
UTF-8 wird z.B. beim Text einlesen im ANSI-Modus zu ANSI und im Unicode-Modus zu Unicode.
Falls das falsch ist, bitte korrigiert mich

Verfasst: 23.09.2006 12:21
von Zaphod
Bist du dir da sicher? UTF-8 *ist* ein Unicodeformat. Es gibt UTF-8 und UTF-16 (und UTF-32 iirc, was aber wohl ziemlicher Quatsch ist). Der unterschied ist, dass in UTF-16 ein zeichen immer in 16 bit gespeichert wird.
Ich dachte ich würde mich an einen Thread im englischen Forum erinnern, in dem Fred erklärt hatte, dass er UTF-8 als codierung nimmt, was nur dann mehr als 1 Byte speicher verwendet, wenn das entsprechende Zeichen ausserhalb des ascii bereiches liegt... kann mich aber auch irren.
Verfasst: 23.09.2006 14:22
von ts-soft
>> Bist du dir da sicher?
Nein, natürlich nicht sicher. Aber SizeOf(charachter) hat in Unicodemodus
immer 2. Speicher wird auch immer der doppelte gebraucht. Sollte ja die
Ausnahme sein bei UTF-8. Also mehr eine naheliegende Vermutung.
Und peeken muß man ja auch mit #PB_Unicode und nicht mit #PB_UTF8
Verfasst: 23.09.2006 14:30
von remi_meier
UTF-8 wird nur zum Konvertieren und lesen halbwegs unterstützt. Standard
auf Windows ist UCS-2 für Unicode, also immer 2 Bytes pro Charakter.
PB unterstützt als eigene Strings nur UCS-2 und ASCII, für UTF-8 gilt so
lange 1 Byte pro Char, bis der ASCII-Wert grösser als 127 ist (z. B. auch
'ä', 'ö', etc.).
Hab den Thread zwar nicht ganz gelesen, aber ich glaube das beantwortet
ein paar Unklarheiten.
Verfasst: 24.09.2006 11:28
von Sven
Kann man eigentlich ein Programm im Unicode-Modus erstellen und trotzdem einige Strings in ASCII haben? Wenn ich Zeichen über die serielle mit MVCOM sende, brauche ich einen ASCII-String...
Sven
Verfasst: 24.09.2006 12:38
von ts-soft
Du kannst den String als ASCII in den Speicher poken und diese Adresse als Buffer angeben.
Code: Alles auswählen
meinstring.s = "Hallo"
meinstring_ascii.s = Space(Len(meinstring) / SizeOf(Character) + 1)
PokeS(@meinstring_ascii, meinstring, #PB_Any, #PB_Ascii)
meinstring kann jetzt irgendwas sein (UNICODE oder ASCII), im Speicher
von meinstring_ascii stehts in ASCII
Zeichen die nicht in ASCII passen, sind natürlich weg

Verfasst: 03.10.2006 14:02
von Andre
Kurz zur Info: freaks Anmerkung wegen fehlerhafter Beschreibung im Handbuch ist für nächstes Update der Hilfe vorgemerkt.