[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2013
    Beiträge
    21

    Wieder mal CCSID und IFS

    Hallo Community

    Ich habe ein eigenartiges Verhalten mit welchem ich wirlich nicht mehr weiter weiss.

    Ausgangslage:
    - 6 jähriges i5 mit V7R1
    - es werden mehrmals stündlich über SFTP Bestellungen von Kundensystemen geholt
    - es betrifft täglich mehrere 100 Dateien

    Vorgehen: zuerst wird für SFTP (batch) eine Liste der auf dem Server(n) vorhandenen Dateien geholt und via Logfile im IFS gespeichert. Dieses Liste wird dann in einem Programm weiterverarbeitet und ein Script erstellt um die Dateien abzuholen und vom Server zu löschen. Die Liste hatte bisher automatisch CCSID 819 und konnte problemlos mit dem nachfolgenden ILERPG direkt verarbeitet werden. Die später abgeholten Dateien hatten ebenfalls alle CCSID 819.

    Jetzt wurde das obige System auf ein neues mit V7R4 gezügelt (das alte läuft z.Z. immer noch). Alle Lizenzprogramme, USRPRF sowie die SYSVAL wurden mit dem alten System abgegelichen/egalisiert. Die IFS-Verzeichnisse wurden gleich angelegt wie im alten System (inkl. CCSID, Owner, Berechtigungen und Freigaben). Die JOBD, SBSD etc. wurde genau gleich definiert.

    Die Standard-CCSID im SYSVAL ist auf beiden Systemen 65535.

    Wird jetzt auf dem neuen System ein SFTP mit den Kundensystemen durchgeführt, wird die Liste der vorhandenen Dateien zwar wie gewünscht ins IFS geschrieben aber sie hat jetzt plötzlich CCSID 1208. Diese Datei lässt sich dann mit dem nachfolgenden Programm nicht verarbeiten (kann nicht geöffnet werden). Erst wenn ich ein CHGATR mache lässt sich die Liste wieder öffnen. Auch haben alle übertragenen Dateien CCSID 1208!

    Auf dem alten System läuft z.Z. alles weiter wie gehabt. An den Kundensystemen liegt es wohl nicht.

    Meine Frage ist jetzt: warum hat das Logfile auf dem alten System CCSID 819 und auf dem neuen CCSI 1208? Welcher Parameter betimmt das? Warum haben alle heruntergeladene Dateien auf dem alten System 819 und auf dem neuen 1208?

    Ich möchte mir, wenn es irgendwie geht, ersparen bei allen Dateien zuerst einen CHGATR machen zu müssen...

    Vielen Dank im voraus für einen Tip?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    18.794
    Nun ja, Grundsatzfehler gehören bestraft;-).
    Wenn die Systeme eine gültige CCSID hätten (also QCCSID <> *HEX) hättet ihr wahrscheinlich nichts bemerkt.

    Mit welchem SFTP transportiert ihr die Daten?
    Falls mit dem aktuellen FTP-Kommando, so hat dies einen CCSID-Parameter, der wahrscheinlich auf *DFT steht. Der Default hat sich wahrscheinlich geändert, von 819 auf 1208 (UTF8).

    Wenn aber euer Job keine gültige CCSID hat, kann UTF8 nicht verarbeitet werden, da das System nicht weiß in welchen Code die Daten umgesetzt werden.

    Mit welcher Methode lest ihr die Daten ins RPG? Irgendwo muss ja eine Umsetzung von 819 in 273/1141 erfolgen.

    Aber auch 819 ist eine schlechte Wahl, da von Windows aus 1252 besser wäre und dies seit V5R3 oder sogar früher unterstützt wird.

    Fazit:
    Prüfe die CCSID-Werte des FTP-Kommandos.
    Setze die QCCSID passend zu euren Dateien. DDS/SQL-Tables haben immer eine CCSID.
    Dann klappts sogar bei ODBC besser.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2013
    Beiträge
    21
    Hallo Fuerchau

    Der mit dem Grundsatzfehler erschliesst sich mir jetzt nicht wirklich. Auf dem alten System läuft ja alles bestens...

    Der Transportkanal ist das 'normale' SFTP des Systems (QP2SHELL) mit dem public und private key und wird mit 'sftp RMTUSER@commpartner.com' gestartet. Im Gegensatz zum normalen FTP habe ich bei SFTP keinen Parameter für die CCSID gefunden.

    Nach der gesicherten Anmeldung erstellt ein Befehl (ls -1) ein Inhaltsverzeichnis des Servers als IFS-Logfile. Dieses Logfile hat bereits 1208 welches auf der alten Maschine 819 hatte. Bis zu diesem Punkt hatte ich keine Möglichkeit irgendwo eine CCSID zu bestimmen bzw. ich habe keine solche Möglichkeit gefunden.

    Das Logfile wird dann mittels einem RPG Programm mit fopen und readonly geöffnet und durchgelesen. Der fopen geht schief wenn das Logfile 1208 hat. Mit 819 klappt es.

    Es ist mir klar, dass man die Datei mit einer Angabe von CCSID öffnen könnte oder zuvor wie bereits erwähnt einen CHGATR machen. Aber es sind eben viele Jobs und noch mehr Dateien.

    Ich kapiere einfach nicht warum die Umsetzung auf dem neuen System nicht gleich funktioniert wie auf dem alten.

    Zu Deinen Empfehlungen:
    - es handelt sich nicht FTP sondern wie oben beschrieben um SFTP via QP2SHELL
    - es handelt sich nicht um DDS oder SQL Dateien sondern um reine IFS Files

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    18.794
    Ein CHGATR führt dann zum Fehler wenn tatsächlich UTF8-Daten enthalten sind.
    Da reicht ein Umlaut.

    Klar funktioniert alles mit CHRID 65535, aber nur innerhalb des Systems.
    Bei allen Aussenverbindungen benötigt man zusätzliche Klimmzüge die mit einer CCSID nicht erforderlich sind.
    Aber da rede ich schon seit 25 Jahren gegen an und es wird immer noch grundsätzlich erst mal 65535 installiert und dann nie geändert. Dabei haben alle Systemtabellen schon immer eine CCSID gehabt.
    Wenn dann Internationalität benötigt wird greift man zu komplexen Szenarien mit gretrennten Libs u.ä. Alles vollkommen unnötig, zumindest seit V5R4.

    Die Ursache siehst du im Übrigen hier:
    https://www.ibm.com/support/knowledg...sPASEccsid.htm

    "Setting the environment variable PASE_DEFAULT_UTF8 to "N" in the current job will allow the prior behavior to be used".
    Dies kannst du auch als Systemvariable setzen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2013
    Beiträge
    21
    Vielen Dank für den Tip mit der environment variable PASE_DEFAULT_UTF8. Genau das war das Problem. Meine bereits 32 jährige Erfahrungen mit den Midrange-Systemen hat eine solche (doch essentielle) Änderung zwischen den Releases jetzt nicht erwartet. Wenn es sich um ein Microsoft Produkt handelt ist man sich einen 'Umkehrparameter' zwischen den Versionen ja schon fast gewohnt. Dass IBM jetzt auch damit anfängt ist schade und vereinfacht die Arbeit nicht wirklich.

    Nochmals herzlichen Dank!
    Wolfgang

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    18.794
    Ich denke mit dieser 32-jährigen Erfahrung wärst du auch darauf gestoßen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. CCSID 273 und CCSID 500
    Von jaimosky im Forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 26-08-20, 10:55
  2. CCSID für XML mit UTF-8
    Von Joe im Forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-09-16, 15:05
  3. Mal wieder SQL
    Von mk im Forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 09-07-15, 11:31
  4. PC, CCSID und IFS
    Von ILEMax im Forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 10-12-14, 14:24
  5. CHG CCSID ?
    Von Liebhoff im Forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 04-09-02, 09:27

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •