unicode

Anfängerfragen zum Programmieren mit PureBasic.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

unicode

Beitrag von delikanli_19_82 »

hallo leute,

wollte mich bissel hinsichtlich unicode schlau machen.

purebasic bietet ja den datentyp .u für unicode an.

wie kann ich nun sowas wie dies hier mittels unicode machen:

Code: Alles auswählen

    define utext.s
    utext = "hallo welt"
    utext + ", wie gehts?"
    debug utext
verwaltet purebasic seine strings intern in utf8 oder ändert sich das abhängig vom os?

wenn die purebasic strings standardmäßig in unicode vorliegen, dann möchte ich sowas machen:

Code: Alles auswählen

procedure.s get_unicode_str_tr( text.s )
 ; ***
endprocedure
Die funtion soll zum Beispiel im Parameterstring solche begriffe wie:
<tr_bs> <tr_ki> suchen und diese durch die entsprechende unicode ersetzen und das ganze wieder
als string zurückschicken.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: unicode

Beitrag von ts-soft »

Da unterliegst Du jetzt einem grossem Irrtum!
Das interne Stringformat richtet sich nach den Compileroptionen und nur mit diesem Stringformat,
Unicode oder ASCII kann man nativ arbeiten. Andere Stringformate kann man nur in einem Memory
halten. Umwandlung ist mit PeekS und PokeS möglich. Aber sobald ein gewandelter String einer
Stringvariable zugeordnet wird, hat er das in den Compileroptionen eingestellte Format.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: unicode

Beitrag von delikanli_19_82 »

wenn ich also unter compileroptionen unicode auswähle, so sind dann alle strings in unicode wie ich verstehe.

ich glaube purebasic verwendet als unicode nur utf8 oder? man kann ja die projektdateien auch in utf8 speichern.

wie verwende ich jetzt den .u - datentyp unicode gerecht?

ich meine, der scheint ja nur numerische werte zu akzeptieren.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: unicode

Beitrag von c4s »

@delikanli_19_82
Ich glaube du kommst da etwas durcheinander: Der "Unicode"-Datentyp (.u) in PureBasic ist ein vorzeichenloses Word (.w) und hat im Grunde nichts mit Strings zu tun... Sonst einfach nochmal das Thema zu Variablen in der Hilfe nachschlagen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: unicode

Beitrag von Mok »

delikanli_19_82 hat geschrieben:ich meine, der scheint ja nur numerische werte zu akzeptieren.
...so wie jeder andere Datentyp auch (außer String)
.a speichert einen Wert von 0 bis 255 (ASCII-Codes), da man mit Unicode weit mehr Zeichen darstellen kann, geht .u von 0 bis 65535. Um das jeweilige Zeichen auszugeben brauchst du den Befehl Chr().
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: unicode

Beitrag von NicTheQuick »

Unicode ist nicht gleich UTF-8. Das heißt die Strings in Purebasic sind entweder ASCII oder Unicode, also nutzen pro Zeichen entweder 1 Byte oder 2 Bytes. UTF-8 hat pro Zeichen unterschiedliche Bytelängen, kann also für ein Zeichen entweder nur 1 Byte oder sogar 4 Bytes verbrauchen.
Purebasic besitzt den Variablentyp Unicode (.u), weil man darin den Zahlenwert eines Zeichen eines Unicode-kodierten Strings speichern kann.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: unicode

Beitrag von delikanli_19_82 »

dann verstehe ich das so, das wenn ich mein projekt mittels compileroptionen als unicode-basiertes projekt fortsetze, so kann ich dann in ein string normale unicode zeichen ablegen.

dann wäre für mich zu klären:

- wie kann ich in ein string ein unicode-zeichen einfügen?

- da sich die byte-menge von zeichen zu zeichen unterscheiden kann, wie kann ich dies ermitteln um zum beispiel den unicode-string durchsuchen zu können bzw. um etwas darin zu ersetzen etc.? ( bei dieser variante handelt es sich doch um utf8 oder? utf16 so weit ich weiß nutzt doch für jedes zeichen 2 byte, während utf8 variable it )

- kann die drawtext funktion auch unicode-zeichen darstellen?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: unicode

Beitrag von ts-soft »

Damit Du auch Unicode-Strings in Literalen verwenden kannst, mußt Du auch UTF-8 in der IDE aktivieren,
bzw. sollte man das grundsätzlich. Desweiteren sind natürlich auch Fonts zu verwenden, die Unicode unterstützen.
UTF-8 wird für Textdokumente genutzt, damit diese nicht soviel Platz verbrauchen. Umwandlung durch die
in PB integrierten Fileoperationen. Wenn Du also eine UTF-8 Datei mit ReadString(0, #PB_UTF8) liest,
erhälst Du entweder einen Unicode- oder Asciistring (der könnte aber Verlustbehaftet sein), somit ist das
durchsuchen eines UTF-8 String unnötig.

DrawText sollte auch mit Unicodezeichen klarkommen, aber da bin ich mir nicht ganz sicher.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten