Unicode vs UTF8

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Unicode vs UTF8

Beitrag von DarkSoul »

Ich habe nochmal eine vielleicht banale Frage:

Es gibt diese 3 Stringtypen:

Code: Alles auswählen

#PB_Ascii 
#PB_UTF8 
#PB_Unicode
Ascii und UTF8 sind mir wohlbekannt. Sind beides Zeichencodierungen.

Aber was steckt hinter #PB_Unicode?

Unicode ist (soviel ich weiß) ein Zeichensatz, den man z.B. in UTF8, UTF16 (oder was auch immer so alles gibt) codieren kann.

Äpfel mit Birnen also. :shock:

Welche Codierung schreibt PB z.B. in den Speicher, wenn ich diese Konstante bei PokeS() übergebe? UTF8 ist es jedenfalls nicht.
Bild
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Unicode vs UTF8

Beitrag von Imhotheb »

Um es kurz Zusammen zu fassen...
Ascii = 1 Byte pro Zeichen
Unicode = 2 Byte pro Zeichen
Utf8 = 1 bis 4 Byte pro Zeichen (die ersten 128 Zeichen sind gleich den Ascii-Zeichen)
PokeS und PeekS akzeptieren Flags um die Kodierung zu ändern
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
Bisonte
Beiträge: 2474
Registriert: 01.04.2007 20:18

Re: Unicode vs UTF8

Beitrag von Bisonte »

DarkSoul hat geschrieben:Welche Codierung schreibt PB z.B. in den Speicher, wenn ich diese Konstante bei PokeS() übergebe? UTF8 ist es jedenfalls nicht.
Wenn du noch nicht die Beta5.50 benutzt, hängt das von deinen Compiler-Optionen ab.
Wenn du dort UNICODE eingestellt hast, wird bei PokeS ohne Parameter auch in Unicode "gepoke't".
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Unicode vs UTF8

Beitrag von Nino »

DarkSoul hat geschrieben:Unicode ist (soviel ich weiß) ein Zeichensatz, den man z.B. in UTF8, UTF16 (oder was auch immer so alles gibt) codieren kann.

Äpfel mit Birnen also. :shock:

Genau so ist es, leider. Der Begriff "Unicode" wird bei PB missverständlich verwendet.
Wenn in der PB-Dokumentation "Unicode" steht, ist meistens "UCS-2" gemeint.
DarkSoul hat geschrieben:Welche Codierung schreibt PB z.B. in den Speicher, wenn ich diese Konstante bei PokeS() übergebe? UTF8 ist es jedenfalls nicht.
Ohne Angabe eines Flags wird ASCII verwendet, wenn das Programm im "ASCII-Modus" (den es beginnend mit Version 5.50 nicht mehr gibt) compiliert wird, und UCS-2 wenn das Programm im sog. "Unicode-Modus" compiliert wird. Wenn Du #PB_Unicode als Flag übergibst, wird ebenfalls UCS-2 verwendet.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Unicode vs UTF8

Beitrag von DarkSoul »

Vielen Dank.

Ich dachte mir schon, dass es UCS-2 ist. Wollte sichergehen. #PB_UCS_2 hätte ich glücklicher gewählt gefunden. War mir unsicher, ob es nicht UTF16 oder noch was anderes ist. :mrgreen:

Ich wollte eben wegen der bevorstehenden "Ascii-Abschaltung " bestehende Sources umrüsten. Dabei sind mir manche interne Schnittstellen kaputt gegangen, weil durch die 16-Bit-Codierung teilweise das höhere Byte 0 ist und das als Stringende fehlerkannt wurde.

Ich dachte zunächst, es wäre UTF8 und habe mich gewundert, warum die Codierung kaputt ist.

Naja, ich werde auf UTF8 umrüsten.
Bild
Antworten