Seite 1 von 1

Unicode Chr()

Verfasst: 10.06.2008 19:22
von Danilo
Da die Funktion Chr() nur mit ASCII funktioniert, kann man damit keine
Unicode-Werte in einen String umwandeln.

Hier ein kleiner Code um das doch zu ermöglichen:

Code: Alles auswählen

CompilerIf #PB_Compiler_Unicode
  Procedure.s uChr(char)
    char$ = " "
    PokeW(@char$,char&$FFFF)
    ProcedureReturn char$
  EndProcedure

  Macro Chr(x)
    uChr(x)
  EndMacro
CompilerEndIf

A$ = "test "+Chr($20AC)+" "+Chr($FB30)+" "+Chr(23)+" "+Chr(70000)+" "+Chr($F000)

MessageRequester("Title",A$)
Damit kann man Unicode-Zeichen bis $FFFF benutzen. PB-Strings scheinen
im Unicode-Modus intern mit 2 Byte pro Zeichen zu arbeiten.

[X] Create unicode executable

Verfasst: 10.06.2008 20:13
von Kaeru Gaman
sorry:

wenn man Create unicode executable aktiviert und Sorce codierung UTF-8 einstellt,
dann funktioniert Chr() mit 2byte....

Code: Alles auswählen

Debug Chr($0152)
kommt wohl auch auf den verwendeten Zeichensatz drauf an...

ich bekomme jedenfalls bei deinem code den identischen fensterinhalt auch ohne den CompilerIf-Block.

Verfasst: 10.06.2008 20:46
von Danilo
Kaeru Gaman hat geschrieben:sorry:

wenn man Create unicode executable aktiviert und Sorce codierung UTF-8 einstellt,
dann funktioniert Chr() mit 2byte....

Code: Alles auswählen

Debug Chr($0152)
kommt wohl auch auf den verwendeten Zeichensatz drauf an...

ich bekomme jedenfalls bei deinem code den identischen fensterinhalt auch ohne den CompilerIf-Block.
OK, Danke Kaeru Gaman.

Dann könnte es fast ein Bug von PureBasic sein, da die Funktionsweise von Chr()
nicht davon abhängen sollte in welchem Format der Source gespeichert wird,
sondern von der Einstellung "Create unicode executable".
Man kann schliesslich auch Unicode verwenden ohne es direkt im Source zu schreiben.
Entweder mit Chr(), aber auch mit DataSections, direkt Werte in Speicherbereiche schreiben usw.

Wenn ich in meinem Source absolut kein Unicode verwende, sondern Werte
zur Laufzeit des Programmes aus einer Datei einlese, dann macht es keinen
Sinn meinen Source in UTF8 abspeichern zu müssen.
Wenn ich ankreuze 'Create unicode executable', dann sollte das auch funktionieren,
egal wie der Source gespeichert ist.

In der Hilfe zu Chr() steht aber dass das Argument ein 'ASCII-Value' ist, also
von 0 bis 127. Daher ist es kein Bug - nur Werte bis 127 werden offiziell
unterstützt (sonst hätte ich es in die Bug-Sektion gepostet).
Wenns dann zufällig doch geht, je nachdem wie man den Source abspeichert,
kann man das nur "komisches Verhalten" nennen. :D

Verfasst: 10.06.2008 21:03
von Kaeru Gaman
yo, da stimme ich dir zu. :D

es gibt so einiges an "komischem Verhalten" seit der 4.0
ich benutz auch noch 4.1, weil ich den vielen Nachbesserungen noch nicht so recht traue.

scheint fast, als ob Fred zur Zeit ne Riesenmenge neue Libs mit allem möglichen SchickMicki reinhaut,
und einige Details auf der Strecke bleiben.

...die standard-64bit-Argumente der DX-API kann man immer noch nicht nativ ansprechen, wa?
...nix halbes nix ganzes...