Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Evtl. Charset-Problem beim Empfang von Daten aus Polen (https://www.delphipraxis.net/90421-evtl-charset-problem-beim-empfang-von-daten-aus-polen.html)

morgworm 17. Apr 2007 10:51


Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Hallo, ich habe folgendes Problem:

Beliebige Binärdateien sollen von weltweit arbeitenden Nutzern eines in Delphi geschriebenen Tools in BLOB-Felder einer Oracle Datenbank geladen werden. Aus historischen Gründen wird die BDE verwendet. Dabei werden die Dateien in mehrere Teile gesplittet (wegen BDE-Cache-Begrenzungen) und beim Auslesen wieder zusammengesetzt.

Das Ganze funktioniert wunderbar, solange dieser Vorgang von deutschen Rechnern aus geschieht. Von Polen aus schleichen sich immer nach dem gleichen Muster Fehler ein. (Die Dateifragmente stehen dann schon falsch in der Datenbank, d.h. das Auslesen/Zusammensetzen funktioniert einwandfrei.)

Ich habe die Fehler mittels einer generierten Testdatei analysiert und folgende Vergleichsübersichten erstellt (Links "lvalue": Originalzeichen, Rechts: Änderung bei Daten von polnischen Rechnern), die NUR die Änderungen enthält, d.h. alle anderen Zeichen werden korrekt übermittelt (bis auf ein paar mit ASCII-Codes>240, die mein Programm komischerweise ignoriert hat):

Delphi-Quellcode:
--------HEX-------DEZ--------------BIN-------
ƒ=?    83=3F   131=63      10000011=00111111
ˆ=?    88=3F   136=63      10001000=00111111
Œ=S   8C=53    140=83      10001100=01010011
 =T   8D=54    141=84      10001101=01010100
 =Z   8F=5A   143=90      10001111=01011010
˜=?    98=3F   152=63      10011000=00111111
 =t   9D=74    157=116     10011101=01110100
Ÿ=z   9F=7A   159=122     10011111=01111010
¡=?    A1=3F   161=63      10100001=00111111
¢=?    A2=3F   162=63      10100010=00111111
£=L   A3=4C   163=76      10100011=01001100
¥=A   A5=41    165=65      10100101=01000001
ª=S   AA=53    170=83      10101010=01010011
¯=Z   AF=5A   175=90      10101111=01011010
²=?    B2=3F   178=63      10110010=00111111
³=l   B3=6C   179=108     10110011=01101100
¹=a   B9=61    185=97      10111001=01100001
º=s   BA=73    186=115     10111010=01110011
¼=L   BC=4C   188=76      10111100=01001100
½=?    BD=3F   189=63      10111101=00111111
¾=l   BE=6C   190=108     10111110=01101100
¿=z   BF=7A   191=122     10111111=01111010
À=R   C0=52    192=82      11000000=01010010
Ã=A   C3=41    195=65      11000011=01000001
Å=L   C5=4C   197=76      11000101=01001100
Æ=C   C6=43    198=67      11000110=01000011
È=C   C8=43    200=67      11001000=01000011
Ê=E   CA=45    202=69      11001010=01000101
Ì=E   CC=45    204=69      11001100=01000101
Ï=D   CF=44    207=68      11001111=01000100
Ñ=N   D1=4E   209=78      11010001=01001110
Ò=N   D2=4E   210=78      11010010=01001110
Õ=O   D5=4F   213=79      11010101=01001111
Ø=R   D8=52    216=82      11011000=01010010
Ù=U   D9=55    217=85      11011001=01010101
Û=U   DB=55    219=85      11011011=01010101
Þ=T   DE=54    222=84      11011110=01010100
ð=d   F0=64    240=100     11110000=01100100
Erkennt jemand ein Muster und kann eine Fehlerursache erahnen? Mich wundert, wie so etwas passieren kann, da doch ausdrücklich Binärdaten übertragen werden sollen.

Die BLOB-Felder werden per cds.Params.ParamByName('blbFile').LoadFromStream(f sPart, ftOraBlob) gefüllt.

Das entsprechende SQL dazu ist: INSERT INTO tblName (...) VALUES (...) RETURNING INTO :blbFile

Wäre für Ideen/Hinweise sehr dankbar!

Gruß François

Bernhard Geyer 17. Apr 2007 11:00

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Was für SQL-Feldtypen haben die Problematischen Felder?

morgworm 17. Apr 2007 11:05

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Das sind BLOB-Felder.

Bernhard Geyer 17. Apr 2007 11:15

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Bist du dir sicher das die Fehler durch den Eintrag in der DB auftreten oder nicht schon zuvor?

morgworm 17. Apr 2007 11:43

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Hmm... z.B. schon beim FileStream-Erzeugen?

Also es läuft ja so: Lokal hat der Benutzer eine Datei zu liegen - für die wird ein readonly-FileStream erzeugt. Der wird dann aufgeteilt in mehrere Teil-FileStreams, die gefüllt werden über fsPart.CopyFrom(fsFileStream, iReadByteSize), d.h. durch Byte-weises Kopieren. Diese werden dann über LoadFromStream vollständig in ein BLOB-Feld gestreamt.

Mehr passiert da nicht. An welcher Stelle kann da ein Fehler auftreten? Arbeiten FileStreams irgendwie auf ASCII-Basis?

Was man prüfen könnte, wäre, wie die Teil-Streams (fsPart) aussehen, bevor sie in die DB geladen werden... aber wenn da wirklich schon eine Veränderung zum Original sein sollte, würde das ja bedeuten, dass man in Polen eigentlich gar keine FileStreams sinnvoll verwenden kann, was eigenartig wäre.

Bernhard Geyer 17. Apr 2007 12:35

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Welchen Inhalt sollen diese FileStreams denn haben? Mit was werden sie gefüllt? Gibt der User Irgendwas in irgendeinem Formular ein und das wird dann binär gespeichert?

DGL-luke 17. Apr 2007 12:47

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Warum werden für die Teilstreams Filestreams und nicht Memorystreams benutzt?

Kannst du Code posten?

morgworm 17. Apr 2007 12:52

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Welchen Unterschied würde es machen, MemoryStreams zu verwenden?
Ich könnte das mal ausprobieren. Es gibt, soweit ich weiß, keinen besonderen Grund, warum wir einen FileStream statt eines MemoryStreams nehmen.

Mehr realen Code als meine wörtliche Beschreibung möchte ich nicht unbedingt preisgeben. Es passiert nicht mehr als ich beschrieben habe.

Bernhard Geyer 17. Apr 2007 12:55

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
TFileStream sollte hier nichts ausmachen.

Es wäre aber seeehr gut zu sehen ob die Änderungen wirklich von der DB verursacht werden (Oracle ist ja auch nicht fehlerfrei).

Ansonsten geb ich dir den Tipp: Setzt eine VM-Ware auf und installier dort ein polnisches Windows. Anschließend kompilierst du deine Exe mit externen Debug-Infos und installierst in der VM den Borland Remote Debugger. Starte dein Anwendung in der VM und verbinde dich mit dieser Exe in der VM.

morgworm 17. Apr 2007 12:56

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
@Bernhard: Der FileStream wird auf einer beliebigen lokalen Datei eines Benutzers, die er in unser System hochladen möchte, gebildet. Was für eine Datei das ist, kann ich nicht beeinflussen - es muss mit jeglichen Dateien wie Bildern, ZIP-Files, TXT, TAR, etc funktionieren.

Es wird nichts in einem Formular o.ä. gespeichert außer der Pfad zu der lokalen Datei des Benutzers, die er hochladen möchte. "Binär" an den Daten sind also nur ggf. die Daten der Datei selbst - nichts sonst irgendwie Generiertes.

morgworm 17. Apr 2007 13:01

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Nette Idee - allerdings sehe ich keine Möglichkeit an ein polnisches Windows zu kommen. Außerdem darf ich hier bürokratiehalber nicht einfach installieren was ich mir ausdenke, sondern muss mich dafür erst durch etliche Abnickungsinstanzen durchkämpfen.

Bernhard Geyer 17. Apr 2007 13:05

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Zitat:

Zitat von morgworm
Nette Idee - allerdings sehe ich keine Möglichkeit an ein polnisches Windows zu kommen. Außerdem darf ich hier bürokratiehalber nicht einfach installieren was ich mir ausdenke, sondern muss mich dafür erst durch etliche Abnickungsinstanzen durchkämpfen.

Ich könnte mir gar nicht mehr ohne VM-Ware zu arbeiten. Armer Entwickler. Du kannst ja u.U. deinen Chef sagen das ohne Polnisches Windows und VM die Fehlersuche vermutlich 2-4 Wochen länger dauert. Evtl. läuft ja dann was.

morgworm 17. Apr 2007 13:11

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Ehe hier jemand einer "so aufwändigen" Installation zustimmt, werde ich mich eher gezwungen sehen, den Dateiaustausch auf andere Weise zu handlen, was, wenn man auf einen definierten Port angewiesen ist und keinen FTP-Server aufsetzen darf, nicht so richtig einfach ist... :freak:

marabu 17. Apr 2007 13:14

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Hallo Francois,

die Streams sind tatsächlich ein Nebenschauplatz. Interessanter scheint mir zu sein, auf welche Oracle-Datentypen die BDE-Blobs (welche Subtypes werden verwendet?) abgebildet werden und welche Einstellungen hüben und drüben für den language driver gemacht wurden. Arbeiten Polen und Deutsche gleichzeitig auf der gleichen Datenbank?

Nicht dass ich bei Oracle helfen könnte, aber das scheinen mir ein paar wichtige Fragen zu sein.

Grüße vom marabu

morgworm 17. Apr 2007 13:19

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Hallo marabu,

ja, Polen und Deutsche arbeiten auf der gleichen Datenbank. Von deutschland aus funktioniert die Technik - immer sogar.

Zitat:

welche Subtypes werden verwendet?
Was bedeutet das?

Die Felder sind Oracle-seitig als "ganz normale" BLOBs definiert worden, die ja normalerweise Byteweise beschrieben werden - BINARY large object.

Zitat:

für den language driver
Was ist "DER" language driver? Language-Environment Variablen von Oracle?

An welcher Stelle können irgendwelche Language-Einstellungen überhaupt Einfluss auf binary data haben?

Gruß François

morgworm 17. Apr 2007 13:24

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Subtypes: Meinst du sowas: tfBlob / ftOraBlob?
Zur Zeit werden sie als ftOraBlob beschrieben.

marabu 17. Apr 2007 13:33

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Über die Blob-Subtypes der BDE wird gesteuert, ob es sich z.B. um Text- oder Grafik-Inhalte handelt.

Ich kenne mich mit Oracle nicht wirklich aus. Meine Befürchtung war, dass CLOBS im Spiel sein könnten, wobei ich nicht weiß, ob dann Transformationen stattfinden.

Deine Tabelle im Beitrag #1 zeigt mir ganz deutlich, dass eine Transformation bei gesetztem HighBit stattfindet. Ich bringe das gefühlsmäßig mit CodePage-Transformationen in Verbindung.

Freundliche Grüße

morgworm 17. Apr 2007 13:46

Re: Evtl. Charset-Problem beim Empfang von Daten aus Polen
 
Allerdings nicht bei jedem gesetzten HighBit. Sondern nur bei ausgewählten Bitkombinationen, die der MSB-1 folgen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.

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