Hallo ,
Ich habe ein spezielles Problem.
Ein Text mit Sonderzeichen und Umlauten in UTF8, der wird auch korrekt in der Datenbank angezeigt.
Aus diesem Text wird ein Datamatrix Code generiert.
Nun, wenn dieser Code mit einem 2D Codescanner, der als Tastatur Emulation funktioniert, den Code scannt, so wird der Code Bytemäßig mit ALT + NUM Codes übertragen. Lazarus erkennt damit auch jedes einzelne Zeichen und in der "OnFormUTF8KeyPress()" wird dieses jedes einzelne Zeichen entsprechend korrekt dargestellt. Leider weiß an der Stelle Lazarus natürlich nicht dass der empfangene Code Bytemäßig zu interpretieren ist und erst 2 empfangene Zeichen von der Tastatur ergeben dann das richtige echte UTF8 Zeichen.
Nun geht es darum, ich müsste die UTF8 Zeichen irgendwie wieder zurück als Byte-Stream bekommen, aber nicht als UTF8 Byte Stream, sondern als echte Bytes und das dann erst als UTF8 interpretieren. Wenn ich das so mache, dann müsste der empfangene Scan auch das richtige wieder anzeigen.
Mir fehlen gerade die Ideen wie ich das am besten anstelle.
(OnFormKeyPress() funktioniert nicht, da kommen bei den Sonderzeichen nur "?" an, es muss daher OnFormUTF8KeyPress() verwendet werden.)
Text in der Eingabe: "_ SSSSµäöüß|łżóś|€"
Text nach dem Scan: "_ SSSSµäöüß|łżóś|€"
Zur Veranschaulichung Bilder, ich denke mein Problem ist sonst nicht richtig zu verstehen:
Hier habe ich die empfangenen Tasten-Codes aufgezeichnet. "KD" = KeyDown() "KP" = UTF8KeyPress():
Verwendete Scanner: Zebra DS2208.
Im Scanner habe ich ein spezielles Start-Zeichen und Ende Kennung programmiert, daher kann ich den Tastenstrom vom Scanner exakt ausschneiden und entsprechend regieren ohne dass die EXE davon betroffen ist.
Und Zebra ist eines der besten Firmen, die emulieren so ziemlich alles was es auf dem Markt gibt. Viele andere Billigteile können die Steuerzeichen nicht darstellen, die in den 2D Codes verwendet werden. Die "normalen" Buchstaben und Zahlen gehen alle richtig.
Vielen Dank für die Hilfe
Viele Grüße Markus
UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
Zuletzt geändert von MmVisual am Sa 23. Okt 2021, 01:40, insgesamt 1-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen?
Ich habe es hin bekommen
:
VG Markus

Code: Alles auswählen
sGuess := GuessEncoding(s2DDat);
sA := ConvertEncoding(s2DDat, sGuess, EncodingAnsi);
s := PChar(sA);
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6786
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
In dem Barcode steht noch mehr drinnen.
Generell Empfehle ich nur 7Bit ANSII im BC/2D zu verwenden. Ansonsten ist man zu sehr auf das was der Drucker und Scanner verträgt angewiesen. Wenn der Kunde dann einen neuen reinen Barcode benötigt, hat man die Arschkarte. Nur so eine Erfahrung aus der Praxis.
Generell Empfehle ich nur 7Bit ANSII im BC/2D zu verwenden. Ansonsten ist man zu sehr auf das was der Drucker und Scanner verträgt angewiesen. Wenn der Kunde dann einen neuen reinen Barcode benötigt, hat man die Arschkarte. Nur so eine Erfahrung aus der Praxis.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
Ich muss 2D Codes im Format "EIGP-114.2018" auswerten können, das ist schon eine gewisse Herausforderung, da die billigscanner nicht alle Steuerzeichen übertragen können.
Hier das Dokument in dem der Aufbau vom 2D Code spezifiziert ist, insbesondere Seite 29 in dem die Zeichen "RS", "GS" und "EOT" drin sind. Ich habe einige Scanner in der Hand gehabt, die meisten hatten mit dem "GS" Zeichen ein Problem und damit konnte ich die einzelnen Datenfelder nicht mehr auseinander halten.
https://www.ecianow.org/assets/docs/GIP ... arcode.pdf
Und da ich diese Labels hauptsächlich für Elektronik benötige und das "µ" Zeichen man für die ganzen Kondensatoren benötigt ist mir vor kurzem aufgefallen dass da das Lesen nicht wirklich geklappt hat. Also bei den Labels die meine Software druckt und auch Labels die über einen Webbrowser von diversen Datamatrix Code Generatoren erzeugt werden, war das "µ" Zeichen immer das gleiche Problem.
Und da das so toll mit "ordentlichen" Scannern und Lazarus funktioniert habe ich dem Scanner als Prefix ein "SOH" und als Suffix ein "EOT" einprogrammiert, damit kann die EXE den Scan sehr schön herausschneiden im OnFormUTF8KeyPress().
Die 2D Scan Funktion habe ich für meine Software auch gut dokumentiert, da steht auch drin dass Umlaute und Sonderzeichen nicht verwendet werden sollten:
http://www.mmvisual.de/Hilfe/EleLa/2DCode.htm
VG Markus
Hier das Dokument in dem der Aufbau vom 2D Code spezifiziert ist, insbesondere Seite 29 in dem die Zeichen "RS", "GS" und "EOT" drin sind. Ich habe einige Scanner in der Hand gehabt, die meisten hatten mit dem "GS" Zeichen ein Problem und damit konnte ich die einzelnen Datenfelder nicht mehr auseinander halten.
https://www.ecianow.org/assets/docs/GIP ... arcode.pdf
Und da ich diese Labels hauptsächlich für Elektronik benötige und das "µ" Zeichen man für die ganzen Kondensatoren benötigt ist mir vor kurzem aufgefallen dass da das Lesen nicht wirklich geklappt hat. Also bei den Labels die meine Software druckt und auch Labels die über einen Webbrowser von diversen Datamatrix Code Generatoren erzeugt werden, war das "µ" Zeichen immer das gleiche Problem.
Und da das so toll mit "ordentlichen" Scannern und Lazarus funktioniert habe ich dem Scanner als Prefix ein "SOH" und als Suffix ein "EOT" einprogrammiert, damit kann die EXE den Scan sehr schön herausschneiden im OnFormUTF8KeyPress().
Die 2D Scan Funktion habe ich für meine Software auch gut dokumentiert, da steht auch drin dass Umlaute und Sonderzeichen nicht verwendet werden sollten:
http://www.mmvisual.de/Hilfe/EleLa/2DCode.htm
VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6786
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
Danke für die Infos. Das Dokument über den Aufbau kannte ich nicht, könnte für die Autoindustrie aber interesannter werden, nachdem das ja langsam Computer mit Rädern werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: UTF8 String in Byte wandeln um daraus UTF8 zu erzeugen? [gelöst]
Diese Codes drucken heute schon DigiKey/Farnell/Mouser auf ihre Tütchen.
Damit lässt sich dann supereinfach die Lagerbuchung bei Anlieferung bewerkstelligen oder das Bestücken der Bauteile auf der Platine. Man scannt einfach und EleLa springt zum Datensatz.
Damit lässt sich dann supereinfach die Lagerbuchung bei Anlieferung bewerkstelligen oder das Bestücken der Bauteile auf der Platine. Man scannt einfach und EleLa springt zum Datensatz.
EleLa - Elektronik Lagerverwaltung - www.elela.de