[NEWSboard IBMi Forum]

Thema: CCSID's

  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    131

    CCSID's

    Hallo,

    ich dachte imemr das CCSID's steuern, in welcher Codierung ein Zeichen angezeigt oder gespeichert wird. Habe aber folgendes Problem, das ich mir nicht erklären kann (Beispiel ohne Gewähr für die Richtigkeit des Hex Codes):

    DSPF: CCSID 273, Zeichen @ ist Hex 7C
    Job: CCSID 285, Zeichen @ ist Hex 5B

    File: CCSID 500, Zeichen @ ist Hex 7C

    Ich hätte erwartet, dass das System bei Eingabe eines @ von 7C auf 5B (DSPF zu Programm/Job) und dann wieder auf 7C (Programm/Job zu Datei) umwandelt.

    Schaue ich aber mit DSPPFM auf die Datei, sehe ich 5B. Es scheint also, das von DSPF zu Programm konvertiert wurde, aber nicht beim Schreiben in die Datei.

    Wo liegt mein Gedankenfehler?


    Grüße

    Matthias

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Eine Konvertierung findet nur zwischen Job und Datenbank statt wenn keine CCSID auf 65535 steht.
    Zwischen DSPF und Job wird generell keine Konvertierung durchgeführt!

    Bei dir sieht es so aus, dass die CCSID des Device halt nicht zum Job passt.
    M.a.W, der Job nimmt an, dass das Device eben auch auf 285 steht und wandelt dann beim Schreiben von 285 auf 500 und beim Lesen wieder zurück.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2009
    Beiträge
    131
    Hhmm, kommt aber nicht hin:

    Job: CCSID 285, Zeichen @ ist Hex 5B

    File: CCSID 500, Zeichen @ ist Hex 7C

    Wenn also vom Job das @ als Hex 5B kommt, müßte dies in der Datei als 7C gespeichert werden. korrekt?

    Genau das passiert hier nicht. In der Datei steht 5B.

    *grübel*

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Prüfe bitte zur Laufzeit genau die CCSID's!
    Um di korrekten Hexwerte zu ermitteln, musst du natürlich den Job in die CCSID der datei anpassen, da ja beim Lesen in die JobCCSID gewandelt wird.
    Auch der DSPPFM muss ja lesen.

    Alternativ könnte auch SQL mit der HEX-Funktion helfen. Ich weiß nicht, auf welcher Ebene die Codewandlung stattfindet, vor der SQL-Funktion (schlechte Karten, macht allerdings Sinn) oder nach der Funktion.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jun 2009
    Beiträge
    131
    ... und mal wieder bin ich aufs Beste stutzig (Obwohl ich gefühlt deinen Ausführungen zugestimmt hätte). Folgendes (vieräugig geprüftes) Szenario:

    I-Access Session: 500
    Job: 273
    Datei 285

    Hex-Werte in Datei:
    $-Zeichen: 4A
    !- Zeichen: 5A
    [- Zeichen: 63
    ]- Zeichen: FC

    Daraus ergibt sich folgende Vermutung:

    - Sind die Hexwerte des Zeichens in der CCSID der Session und des Jobs gleich, wandelt das System in den Hexwert der CCSID der Datei um ($=5B und != 4F)

    - Sind diese unterschiedlich, wird der Hexwert der CCSID des Jobs weggeschrieben ([=4A Session und 63 im Job / ]=5A Session und FC im Job).

    Kann das sein?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Fangen wir beim Terminal an:
    Die 5250 arbeitet im SBCS-Modus.
    Die Zeicheneingabe erfolgt in der Codepage des Terminals (Windows z.B. 1252 ANSI deutsch).
    Dieser ANSI-Code wird in den EBCDIC Hexwert der CCSID des Terminals umgewandelt.
    Hier kann schon ein Problem auftreten, dass der ANSI-Wert nicht den passenden Code umgewandelt wird.
    Dies lässt sich aber durch den Debugger und Anzeige der Variablen im Job feststellen.
    Die JOB-CCSID ist da nicht relevant.

    Mein Terminal steht auf 500 und ich gebe "[ ]" ein, als Hex landert im Job dann "4A5A".
    Bei der Anzeige der Variablen wird mir "ÄÜ" angezeigt.

    Stelle ich mein Terminal auf 1141 (deutsch, passend zu Windows) wir dem Programm korrekt "63FC" übergeben.

    Dieser Wert wird dann vom Job in die DB-CCSID übertragen.

    Es ist also auf jeden Fall wichtig, dass bereits das Terminal eine CCSID bekommt, die dem Eingabegebiet entspricht.

    Die richtige CCSID für ein deutsches Terminal ist also 273/1141 und nicht 500!
    der Job muss dann dem Terminal entsprechen, dann klappts auch mit der CCSID.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ergänzung:
    Sicherlich wollt ihr auch drucken, dabei taucht dann das nächste Problem auf.
    Zwischen Job und PRTF erfolgt wiederum keine Codewandlung!
    Bei Verwendung von Druckkonstanten werden diese bei der Erstellung von der SRC-CCSID in die JOB-CCSID umgewandelt und sind dann nicht mehr veränderbar (übrigens wie auch PGM-Konstanten).
    Der korrekte Druck wird dann über die CHRID der PRTF bzw. des späteren Spools entschieden.
    Default steht hier *DEVD!
    Je nach späterem Zieldrucker wird dann von der CHRID im Drucker die Konvertierung in ASCII (Achtung nicht ANSI) umgewandelt.
    Im WSCST kann man je CHRID die ESC-Sequenz für die Drucker-Codepage angeben. Für 273 697 ist das dann die 850.

    Wenn also die JOB-CCSID nicht zum späteren Druck passt kommen eben falsche Zeichen.
    Die CHRID einer PRTF kann man gezielt angeben bzw. überschreiben, wobei ein Überschreiben die enthaltenen Textkonstanten natürlich nicht anpasst.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Jun 2009
    Beiträge
    131
    HI vielen Dank für die vielen Info's!
    Wir haben hier heute zuletzt mit mehreren Leuten unterschiedliche Szenarien durchdiskutiert. Da mehrere davon das richtige Ergebnis vorhersagen konnten, scheint's angekommen zu sein. Die anderen sind gerade in der Personalabteilung, Papiere abholen...

    Danke!

Similar Threads

  1. CPYTOIMPF und CCSIDS der ewige Kampf ;-)
    By MGJ79 in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-12-10, 15:58
  2. Wie richte ich die i5 für mehrere Sprachräume ein?
    By edv90020 in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 09-06-08, 20:30
  3. DB2-Connect: Fehler bei BIND *dringend*
    By Lichtblitz in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-06-05, 07:59
  4. Codepage für RPG Compiler
    By niceguy in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 09-06-05, 15:50
  5. Anwendung Rumänisch/Deutsch
    By niceguy in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-05-05, 16:17

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •