Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Kodierung in UCS-2 Little Endian (https://www.delphipraxis.net/183607-kodierung-ucs-2-little-endian.html)

Dragon27 22. Jan 2015 12:50

Kodierung in UCS-2 Little Endian
 
Hallo zusammen,

wie die Überschrift sagt, habe ich Probleme mit dem kodieren einer Nachricht in "UCS-2 Little Endian".
Leider kann die lesende Lasermaschine nur dieses Encoding einwandfrei verarbeiten.
Wie kann ich Delphi am Besten dazu bringen, die Datei richtig zu kodieren?

Folgenden Code habe ich geschrieben, aber er funktioniert leider bei einigen Zeichen nicht:

Delphi-Quellcode:
strStream := TStringStream.Create('', TEncoding.Unicode);
Am Anfang der XML Datei steht übrigends folgendes Encoding:
Code:
<?xml version="1.0" encoding="utf-16"?>
Danke für eure Hilfe!

Bernhard Geyer 22. Jan 2015 12:54

AW: Kodierung in UCS-2 Little Endian
 
Am besten einen XML-Parser zum schreiben nehmen der UTF16 kann.

mjustin 22. Jan 2015 14:14

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von Dragon27 (Beitrag 1287443)

wie die Überschrift sagt, habe ich Probleme mit dem kodieren einer Nachricht in "UCS-2 Little Endian".
...
Am Anfang der XML Datei steht übrigends folgendes Encoding:
Code:
<?xml version="1.0" encoding="utf-16"?>

Delphi "kennt" UTF-16 LE als "xetUTF_16LE" laut http://docwiki.embarcadero.com/Libra...MLEncodingType

Das würde ich testen, aber auch mal den Hersteller fragen wie "utf-16" im Header zu "ucs-2 LE" passt, denn es gibt auch "ISO-10646-UCS-2" als XML encoding.

Bernhard Geyer 22. Jan 2015 14:20

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von mjustin (Beitrag 1287454)
Das würde ich testen, aber auch mal den Hersteller fragen wie "utf-16" im Header zu "ucs-2 LE" passt, denn es gibt auch "ISO-10646-UCS-2" als XML encoding.

Solange man nicht Klingonischen Text überträgt ist UTF-16 und UCS-2 das gleiche. UTF-16 erweitert UCS-2 um einen ähnlichen Mechanismus wie UTF-8 die Ansistrings. 99,99% der realen vorkommenden UTF-16 Texte sind 1:1 in UCS-2 abbildbar.

NicoDE 22. Jan 2015 14:52

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1287456)
Solange man nicht Klingonischen Text überträgt ist UTF-16 und UCS-2 das gleiche.

Ja, aber wenn die Maschine spezielle UCS-2 Code-Units braucht, die als UTF-16 Surrogates interpretiert werden, dann braucht man eine Alternative.
Also ist eher die Frage, bei welchen Zeichen es nicht funktioniert und wie die Quelldaten erzeugt/generiert werden...

mjustin 22. Jan 2015 14:58

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1287456)
Zitat:

Zitat von mjustin (Beitrag 1287454)
Das würde ich testen, aber auch mal den Hersteller fragen wie "utf-16" im Header zu "ucs-2 LE" passt, denn es gibt auch "ISO-10646-UCS-2" als XML encoding.

Solange man nicht Klingonischen Text überträgt ist UTF-16 und UCS-2 das gleiche. UTF-16 erweitert UCS-2 um einen ähnlichen Mechanismus wie UTF-8 die Ansistrings. 99,99% der realen vorkommenden UTF-16 Texte sind 1:1 in UCS-2 abbildbar.

In Statistik bin ich ganz schwach, aber dann wäre mit diesem Wert das Risiko auf ein nicht abbildbares XML Dokument zu laufen um einige Größenordnungen größer als einen Sechser im Lotto zu haben? (Laut Wikipedia 0,0000064360%) - Andererseits weiss ich nicht, wie viele XML Dateien so eine Lasermschine pro Woche bekommt, Millionen wohl kaum ... :)

himitsu 22. Jan 2015 15:56

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von mjustin (Beitrag 1287462)
Andererseits weiss ich nicht, wie viele XML Dateien so eine Lasermschine pro Woche bekommt, Millionen wohl kaum ... :)

Mit viel Glück kann es ja auch gleich beim ersten Mal knallen. :stupid:

Bernhard Geyer 22. Jan 2015 17:52

AW: Kodierung in UCS-2 Little Endian
 
Ich glaube nicht das man im Bereich der erstellen dieser Daten in die Gefahr kommt Zeichen zu haben die in UTF-16 und UCS-2 anders codiert wären.

Unsere Anwendung lief problemlos auf einem UCS-2 System (Windows 2000) und läuft auch Problemlos auf UTF-16 Systemen (Windows XP und neuer) ohne eine einzige Quellcodezeile angepasst zu haben!

himitsu 22. Jan 2015 18:13

AW: Kodierung in UCS-2 Little Endian
 
Habt ihr auch damals Daten als UCS-2 gespeichert und dann versucht als UTF-16 zu laden? :stupid:

mjustin 22. Jan 2015 18:33

AW: Kodierung in UCS-2 Little Endian
 
Zitat:

Zitat von himitsu (Beitrag 1287490)
Habt ihr auch damals Daten als UCS-2 gespeichert und dann versucht als UTF-16 zu laden? :stupid:

Das sollte gehen, UCS-2 umfasst die BMP, welche Platz für 65.536 Zeichen hat.

Die umgekehrte Richtung geht nicht (UTF-16 nach UCS-2 konvertieren). Für die Zeichencodierung stehen in Unicode insgesamt 1.111.998 Codepunkte zur Verfügung. Und 1.111.998 > 65.536.

Wenn man mit der Lasermaschine zum Beispiel keine Emojis oder Mahongg-Zeichen ausgeben muss, Gl♫ckwunsch :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz