Seite 1 von 1
unicode
Verfasst: 25.04.2011 23:40
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.
Re: unicode
Verfasst: 26.04.2011 00:02
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.
Re: unicode
Verfasst: 26.04.2011 01:38
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.
Re: unicode
Verfasst: 26.04.2011 11:32
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.
Re: unicode
Verfasst: 26.04.2011 11:35
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().
Re: unicode
Verfasst: 26.04.2011 13:41
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.
Re: unicode
Verfasst: 26.04.2011 14:24
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?
Re: unicode
Verfasst: 26.04.2011 14:47
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