Erkennen ob das Zeichen ein UTF8 Zeichen ist

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mse »

mschnell hat geschrieben: Was passiert, wenn bei der (automatischen) Umwandlung von Unicode nach ANSI, in der eingestellten System-Ansi-Tabelle das Unicode-Zeichen nicht definiert ist ?
Die Umwandlung geschieht teilweise durch Betriebssystem Routinen. Dabei wird nach meinen Erfahrungen entweder ein '?' für ein nicht darstellbares Zeichen eingesetzt, ein leerer String zurückgegeben oder eine Exception ausgelöst.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mse »

mschnell hat geschrieben: Meine Frage ist: unter welchen Umständen (außer wenn bei Mac bekloppte Dateinamen verwendet werden) wird man tatsächlich mit surrogate pairs konfrontiert werden ?
Nie, ausser bei Unicode Tests, altägyptisch und Ähnlichem. Auch bekloppte Mac Dateinamen enthalten keine surrogate pairs.

mschnell
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

mse hat geschrieben:Nie, ausser bei Unicode Tests, altägyptisch und Ähnlichem. Auch bekloppte Mac Dateinamen enthalten keine surrogate pairs.
Da hat sich aber weiter oben jemand furchtbar aufgeregt ?!?!?!?!?!?!?
-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mse »

theo hat geschrieben: Ich könnte aber damit die Frage auch nicht abschliessend beantworten.
"A UnicodeString can contain either a Unicode-sized character, or an ANSI byte-sized character. "
Das geht mir genau gleich, wir müssen wohl oder übel auf die Auskunft eines D2009 Besitzers warten.

marcov
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von marcov »

mse hat geschrieben:
theo hat geschrieben: Ich könnte aber damit die Frage auch nicht abschliessend beantworten.
"A UnicodeString can contain either a Unicode-sized character, or an ANSI byte-sized character. "
Das geht mir genau gleich, wir müssen wohl oder übel auf die Auskunft eines D2009 Besitzers warten.
Ich habe etwas aehnliches gehoert. TUnicodeString kann auch utf-8 speichern, und die Granularitaet ist in der Tunicodestring gespeicherd. Ich habe das aber noch nicht Verifizieren koennen

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

http://www.moonsoft.fi/materials/codege ... nicode.pdf" onclick="window.open(this.href);return false;

Code: Alles auswählen

 
-12       -10          -8        -4     String reference address
Code page Elem size    Ref count length First char of string
 
A corresponding support data structure is declared in the implementation section of System
unit as:

Code: Alles auswählen

type
           PStrRec = ^StrRec;
           StrRec = packed record
             codePage: Word;
             elemSize: Word;
             refCnt: Longint;
             length: Longint;
           end;
Also wenn ich das richtig verstehe, haben nun alle referenzgezählten Strings in Delphi diese Struktur, und sind wohl ergo strukturell nicht kompatibel mit den FPC Typen.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mse »

theo hat geschrieben:http://www.moonsoft.fi/materials/codegear_delphi_2009_and_unicode.pdf

Also wenn ich das richtig verstehe, haben nun alle referenzgezählten Strings in Delphi diese Struktur, und sind wohl ergo strukturell nicht kompatibel mit den FPC Typen.
Endlich Klarheit. Danke Theo!

mschnell
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:ergo strukturell nicht kompatibel mit den FPC Typen.
Wenn sie funktionskompatibel sind, sollte das reichen.
-Michael

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

mschnell hat geschrieben:
theo hat geschrieben:ergo strukturell nicht kompatibel mit den FPC Typen.
Wenn sie funktionskompatibel sind, sollte das reichen.
-Michael
Das können sie natürlich auch nicht sein, da den FPC Typen Informationen fehlen.

mschnell
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:Das können sie natürlich auch nicht sein, da den FPC Typen Informationen fehlen.
Ah, Du meinst die momentanen, nicht die zukünftigen.... Soweit ich weiß, ist das FPC Team da dran.

-Michael

marcov
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von marcov »

Also wenn ich das richtig verstehe, haben nun alle referenzgezählten Strings in Delphi diese Struktur, und sind wohl ergo strukturell noch nicht kompatibel mit den FPC Typen.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

marcov hat geschrieben:Also wenn ich das richtig verstehe, haben nun alle referenzgezählten Strings in Delphi diese Struktur, und sind wohl ergo strukturell noch nicht kompatibel mit den FPC Typen.
Weisst du da genaueres?

marcov
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von marcov »

theo hat geschrieben:
marcov hat geschrieben:Also wenn ich das richtig verstehe, haben nun alle referenzgezählten Strings in Delphi diese Struktur, und sind wohl ergo strukturell noch nicht kompatibel mit den FPC Typen.
Weisst du da genaueres?
Ja, ich habe soeben den URL von Cantu an Florian gegeben :-)

Ich muss da noch ein bisschen darueber denken, und werde dann den Unicode PDF updaten. (und hier ein URL posten)

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

marcov hat geschrieben: Ja, ich habe soeben den URL von Cantu an Florian gegeben :-)
Gut ;-)

Vielleicht könnt ihr auch meinen UTF8Proc Port gebrauchen: http://www.theo.ch/lazarus/utf8proc_pas.zip" onclick="window.open(this.href);return false;
Für TCharacter, Normalisierung etc.

marcov
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: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von marcov »

theo hat geschrieben: Vielleicht könnt ihr auch meinen UTF8Proc Port gebrauchen: http://www.theo.ch/lazarus/utf8proc_pas.zip" onclick="window.open(this.href);return false;
Für TCharacter, Normalisierung etc.
Der embedded Fall werden wir erst später berücksichtigen. Zuerst der normale Fall über OS Routines.

Antworten