utf8 und Umlaute, Sonderzeichen
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: utf8 und Umlaute, Sonderzeichen
WideString ist doch aber nicht aus Widechar aufgebaut oder ? Ich erinenr mich Grau das Marco mal gesagt hast Widestring funktioniert nicht...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: utf8 und Umlaute, Sonderzeichen
Christian hat geschrieben:WideString ist doch aber nicht aus Widechar aufgebaut oder ? Ich erinenr mich Grau das Marco mal gesagt hast Widestring funktioniert nicht...
Woraus denn sonst?
Widestring:=WideChar funzt 100pro. Sonst wäre das Leben ja ziemlich kompliziert.
Re: utf8 und Umlaute, Sonderzeichen
Aha, stelle fest, die Experten sind auch ein wenig ratlos
Unter DOS funktioniert Case nur im ein byte-Bereich, das weiß ich definitiv, nix mit word!
Grüße, Günther

Unter DOS funktioniert Case nur im ein byte-Bereich, das weiß ich definitiv, nix mit word!
Grüße, Günther
Re: utf8 und Umlaute, Sonderzeichen
Nur die einen...guennid hat geschrieben:Aha, stelle fest, die Experten sind auch ein wenig ratlos

Was heisst das denn? Das hängt wohl kaum vom Betriebssystem ab, was der Compiler da macht.guennid hat geschrieben: Unter DOS funktioniert Case nur im ein byte-Bereich, das weiß ich definitiv, nix mit word!
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: utf8 und Umlaute, Sonderzeichen
Christian hat geschrieben:WideString ist doch aber nicht aus Widechar aufgebaut oder ? Ich erinenr mich Grau das Marco mal gesagt hast Widestring funktioniert nicht...
Das Functioniert, aber ist eine 16-bits Werte. (64k Werte wovon 62k nutzbar, die andere 2k sind fuer Surrogate escapes forgesehen).
Das ist nicht anders dann das utf8string ein char ist (8-bits werte wovon +/- 128 nutzbar, die andere 128 sind fuer Surrogate escapes forgesehen).
In andere Worte: sowohl für utf8string als widestring (und unicodestring in die Zukunft) gibt [] nicht dem volle Unicode bereich. Natuerlich ist der Bereich für widestring/unicodestring praktischer als die 127 unterschiedliche Zeichen für ein utf8-in-ansistring die mann sicher mit [] verwenden kann.
Re: utf8 und Umlaute, Sonderzeichen
Bist du sicher? Wie erkenne ich das?marcov hat geschrieben: (64k Werte wovon 62k nutzbar, die andere 2k sind fuer Surrogate escapes forgesehen).
Ich habe keine Probleme mit GTK2 z.B. den obersten Range auszugeben:
Code: Alles auswählen
var awc:WideString;
begin
awc:=WideChar($FFFD);
Label1.Caption:=UTF8Encode(awc);
end;
U+FFFC  ef bf bc OBJECT REPLACEMENT CHARACTER
U+FFFD � ef bf bd REPLACEMENT CHARACTER
wird bei mir ohne weiteres via WideChar/WideString in UTF8 umgewandelt und angezeigt.
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: utf8 und Umlaute, Sonderzeichen
Die oberen Regionen sind ueber 64k! Ich weiss nicht wie wichtig diese sind. Die meisten oberen Codepoints sind von verstorbene Sprachen. Die Mathematische und Musik symbolen konnten aber nutzlich sein, und ich weiss nicht ob die hohe CJK Symbolen (http://unicode.org/roadmaps/sip/" onclick="window.open(this.href);return false;) wirklich im Brauch sein, oder nur fuer Literatur studien.theo hat geschrieben:Bist du sicher? Wie erkenne ich das?marcov hat geschrieben: (64k Werte wovon 62k nutzbar, die andere 2k sind fuer Surrogate escapes forgesehen).
Ich habe keine Probleme mit GTK2 z.B. den obersten Range auszugeben:
Und die 2k die vom BMP die nicht nutzbar sind aber also auch so reserviert in unicode. Das ist die D800-DFFF range, siehe http://unicode.org/roadmaps/bmp/index.html" onclick="window.open(this.href);return false;, da kann man auch sehen das vor E000-F8FF keine standardisierten Karakter gemapt sind.
Also man kan mit UCS2 (UTF-16 ohne Surrogates) nur 64k - 2k (D800-DFFF) - 6k (E000-F7FF) - 256 (F800-F8FF) = 57,75k standardisierte Codepoints erreichen.
Re: utf8 und Umlaute, Sonderzeichen
Ok, die sind ja auch so eingetragen: http://www.utf8-zeichentabelle.de/unico ... tart=55296" onclick="window.open(this.href);return false;
Das bedeutet für mich in der Praxis aber trotzdem, das WideChar/WideString ohne Tricks und Kopfschmerzen ausreicht um z.B. einen Unicode-fähigen Editor zu schreiben.
Ich glaube den Bereich über $FFFF kann man für eine "normale" Anwendung ignorieren. Ich kenne z.B. auch keine Fonts für diesen Bereich.
Das bedeutet für mich in der Praxis aber trotzdem, das WideChar/WideString ohne Tricks und Kopfschmerzen ausreicht um z.B. einen Unicode-fähigen Editor zu schreiben.
Ich glaube den Bereich über $FFFF kann man für eine "normale" Anwendung ignorieren. Ich kenne z.B. auch keine Fonts für diesen Bereich.
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: utf8 und Umlaute, Sonderzeichen
(Ich glaube Ost Asien Windows XP Versionen und das Vista versionen mit eine Ost Asien locale installiert diese haben. Die freie OSen haben oft diese Fonts auch schon, weiss nicht von OS X)theo hat geschrieben:Ok, die sind ja auch so eingetragen: http://www.utf8-zeichentabelle.de/unico ... tart=55296" onclick="window.open(this.href);return false;
Das bedeutet für mich in der Praxis aber trotzdem, das WideChar/WideString ohne Tricks und Kopfschmerzen ausreicht um z.B. einen Unicode-fähigen Editor zu schreiben.
Ich glaube den Bereich über $FFFF kann man für eine "normale" Anwendung ignorieren. Ich kenne z.B. auch keine Fonts für diesen Bereich.
Aber das wichtigigere ist das man dann wieder eine gefährlichen Vereinfachung macht. Und die kann in ein paar Jahre Problemen mache.
Fuer mich, und fuer Free Pascal versuche alles was man wiederbrauchen kann, wie Widgets, Bibliotheke und Frameworks in Prinzip Unicode compliant (also >$FFFF supported), aber spar mir den Aufwand für reine Business Code.
Re: utf8 und Umlaute, Sonderzeichen
Genau so sehe ich das auch.marcov hat geschrieben: Fuer mich, und fuer Free Pascal versuche alles was man wiederbrauchen kann, wie Widgets, Bibliotheke und Frameworks in Prinzip Unicode compliant (also >$FFFF supported), aber spar mir den Aufwand für reine Business Code.
Ich denke auch, dass Unicode-Support für Anwendungen durchaus graduell sein kann.
"Komplikationsstufen" können z.B. sein
- Latin, Cyrilic .. (LtoR)
- Hebrew, Arabic.. (RtoL), Bidirektionaler Text
- Asiatisch (speziell?)
- Zeichen > $FFFF
etc.
Man muss ja nicht gleich alles machen, sonst wird es zu kompliziert und man wird gar nie fertig

Re: utf8 und Umlaute, Sonderzeichen
Und wieder einmal kann ich euch teilweise nicht folgen. Ich weiß nicht, was "$FFFF" oder
"E000-F8FF" ist. Ist das so'n Hexadezimal-Kram? Habe ich bisher nicht gebraucht.
Was sagt ihr zu diesem Beispiel:
Bis anzahl := 27 wird eine doppelte Linie in Zeile 12 gezeichnet. Ab 28 erfolgt ein Zeilenumbruch in der Ausgabe. Was ist falsch?
Grüße, Günther
"E000-F8FF" ist. Ist das so'n Hexadezimal-Kram? Habe ich bisher nicht gebraucht.
Was sagt ihr zu diesem Beispiel:
Code: Alles auswählen
program widechartest;
uses crt,strings;
var
myChar : WideChar;
anzahl : BYTE;
FUNCTION whs(wh_c:WIDECHAR;wh_max:BYTE) : WIDESTRING;
{bildet einen Wiederholungsstring aus einem Zeichen}
VAR
wh_tmp_kette : WIDESTRING;
wh_zaehl : BYTE;
BEGIN
wh_tmp_kette := '';
FOR wh_zaehl := 1 TO wh_max DO
wh_tmp_kette := wh_tmp_kette+wh_c;
whs := UTF8ENCODE(wh_tmp_kette);
END; {F. whs}
begin
clrscr;
myChar := UTF8DECODE('═')[1]; anzahl := 29;
gotoxy(2,12);write(whs(myChar,anzahl));writeln;
end.
Grüße, Günther
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: utf8 und Umlaute, Sonderzeichen
Das ist der Beginn der entsprechenden Codebereiche (2 Hexadezimale Bytes)... was bspw. E000 für ein Bereich ist, steht hier:guennid hat geschrieben:Und wieder einmal kann ich euch teilweise nicht folgen. Ich weiß nicht, was "$FFFF" oder
"E000-F8FF" ist. Ist das so'n Hexadezimal-Kram? Habe ich bisher nicht gebraucht.
http://www.unicode.org/charts/charindex.html" onclick="window.open(this.href);return false;
Johannes
Re: utf8 und Umlaute, Sonderzeichen
http://de.wikipedia.org/wiki/Hexadezimalsystem" onclick="window.open(this.href);return false;
Hexadezimal $FFFF entspricht dezimal 65535
Weil in der Computerei halt immer mit Bytes gearbeitet wird, sieht die Hex Form einfach klarer aus.
Der höchste Wert in einem Byte ist 255 und der eines Word (wie WideChar) 65535.
Das sieht aber "zufällig" aus, weil es nicht den zugrundeliegenden Einheiten entspricht, und ich kann mir das High(Word) in Dez. auch nicht merken.
In Hexadezimal ist es einfach $FF bzw. $FFFF.
Ich nehme an, dass man historisch das Byte (8bit) als Grundeinheit nahm um alle nötigen Zeichen darzustellen.
Ich lese gerade das historisch ein "Zeichen" auch aus weniger Bits bestehen kann:
bei Telex: 1 Zeichen = 5 Bit
bei ASCII: 1 Zeichen = 7 Bit
bei IBM-PC: 1 Zeichen = 8 Bit = 1 Byte = 1 Oktett
Das ist also genauso willkürlich wie das Dezimalsystem (10 Finger).
Hexadezimal $FFFF entspricht dezimal 65535
Weil in der Computerei halt immer mit Bytes gearbeitet wird, sieht die Hex Form einfach klarer aus.
Der höchste Wert in einem Byte ist 255 und der eines Word (wie WideChar) 65535.
Das sieht aber "zufällig" aus, weil es nicht den zugrundeliegenden Einheiten entspricht, und ich kann mir das High(Word) in Dez. auch nicht merken.
In Hexadezimal ist es einfach $FF bzw. $FFFF.
Ich nehme an, dass man historisch das Byte (8bit) als Grundeinheit nahm um alle nötigen Zeichen darzustellen.
Ich lese gerade das historisch ein "Zeichen" auch aus weniger Bits bestehen kann:
bei Telex: 1 Zeichen = 5 Bit
bei ASCII: 1 Zeichen = 7 Bit
bei IBM-PC: 1 Zeichen = 8 Bit = 1 Byte = 1 Oktett
Das ist also genauso willkürlich wie das Dezimalsystem (10 Finger).
Re: utf8 und Umlaute, Sonderzeichen
Leute, sagt mir doch um Gottes Willen mal, wie ich ein solches Sonderzeichen wiederholt in eine Bildschirmzeile schreibe, am besten in irgendeiner string-Form. Irgendwie funktioniert wohl auch die Funktion "Write()" nicht DOS-üblich.
Beispiel:
Ich weiß mittlerweile, dass man dieses Zeichen: "┌" einer WIDECHAR-Variablen mittels #226#148#140 zuweisen kann. also:
meinC := #226#148#140;
for zaehl := 5 to 55 do begin
gotoxy(zaehl,12);write(meinC);
end;
funktioniert nicht,
für
meinC := 'a';
funktioniert das aber sehr wohl.
meinC := #226#148#140
for zaehl := 5 to 55 do begin
gotoxy(zaehl,12);writeln(meinC);
end;
funktioniert dagegen. Das kann's doch eigentlich nicht sein! Wer erklärt mir das Gewürge?
Eigentlich brauchte ich das Zeichen aber (wiederholt) in einem String und dazu habe ich noch gar keine Möglichkeit gefunden, den in einer Zeile auszugeben.
Grüße, Günther
Beispiel:
Ich weiß mittlerweile, dass man dieses Zeichen: "┌" einer WIDECHAR-Variablen mittels #226#148#140 zuweisen kann. also:
meinC := #226#148#140;
for zaehl := 5 to 55 do begin
gotoxy(zaehl,12);write(meinC);
end;
funktioniert nicht,
für
meinC := 'a';
funktioniert das aber sehr wohl.
meinC := #226#148#140
for zaehl := 5 to 55 do begin
gotoxy(zaehl,12);writeln(meinC);
end;
funktioniert dagegen. Das kann's doch eigentlich nicht sein! Wer erklärt mir das Gewürge?
Eigentlich brauchte ich das Zeichen aber (wiederholt) in einem String und dazu habe ich noch gar keine Möglichkeit gefunden, den in einer Zeile auszugeben.
Grüße, Günther
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: utf8 und Umlaute, Sonderzeichen
Ich vermute, writeln kann Widestring überhaupt nicht richtig bearbeiten. Vermutlich ist das total der falsche Ansatz.guennid hat geschrieben: gotoxy(zaehl,12);writeln(meinC);
-Michael