[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    29

    fopen() codepage für ANSI

    Hallo!

    Ich habe mal eine Frage zur Standard-C Funktion fopen(): Welche Codepage oder CCSID muss man angeben, um bei Schreiben in eine IFS-Textdatei die Daten im ANSI-Format zu erhalten? Ich möchte das gleich Ergebnis erhalten, wie beim Befehl CPYTOSTMF STMFCODPAG(*PCASCII).

    Ich habe schon 850 versucht. Die Datei wird dann trotzdem mit 273 erstellt und es werden unter Windows nur wirre Zeichen angezeigt.

    Danke schonmal für jede Hilfe,

    Titus

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    1252 ist Windows-Codepage.
    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
    Mar 2006
    Beiträge
    29
    Oh, danke für die schnelle Antwort. Leider klappt das aber irgendwie nicht. Wenn ich bei fopen() als ccsid oder als codepage den Wert 1252 angebe, hat die Ausgabedatei die CCSID 5348 und es werden immernoch wilde Zeichen angezeigt.



    Titus

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Um eine CCSID/Codepage zu bestimmen, darf die Datei nicht bereits existieren, sonst behält sie ihre alte Codepage.
    Codepageunterstützung gibt es nur im IFS nicht im QDLS oder QNTC.

    Wenn man im C-Handbuch nachliest, erwartet das IFS die Daten bereits in der angegebenen Codepage, man muss die Codewandlung also selber durchführen (leider).

    Macht man z.B. einen fpen(... codepage=1252) müssen die Daten in 1252 geschrieben werden. Existiert die Datei bereits, wird von 1252 in die Codepage der Datei gewandelt.

    Es stellt sich also so dar, als ob der Job temporär auf diese Codepage gesetzt würde (schreiben und lesen).
    Für die Codewandlung gibt es wiederum eigene API's:
    http://publib.boulder.ibm.com/iserie...s/iconvopn.htm
    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
    Feb 2001
    Beiträge
    20.241
    Wenn man noch ein wenig weiterliest gibt es "o_ccsid" bzw. "o_codepage". Damit sind wohl die echten File-CCSID's gemeint.
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    der Trick mit nicht vorhanden und automatisch konvertieren geht mit:
    öffnen mit Codepage und Create
    schließen
    neu öffen mit Textdata und ohne Codepage Angabe

    Beispiel dazu auf meiner OpenSource Seite (nach OUTSTREAM suchen)

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau
    Um eine CCSID/Codepage zu bestimmen, darf die Datei nicht bereits existieren, sonst behält sie ihre alte Codepage.
    Codepageunterstützung gibt es nur im IFS nicht im QDLS oder QNTC.

    Wenn man im C-Handbuch nachliest, erwartet das IFS die Daten bereits in der angegebenen Codepage, man muss die Codewandlung also selber durchführen (leider).

    Macht man z.B. einen fpen(... codepage=1252) müssen die Daten in 1252 geschrieben werden. Existiert die Datei bereits, wird von 1252 in die Codepage der Datei gewandelt.

    Es stellt sich also so dar, als ob der Job temporär auf diese Codepage gesetzt würde (schreiben und lesen).
    Für die Codewandlung gibt es wiederum eigene API's:
    http://publib.boulder.ibm.com/iserie...s/iconvopn.htm
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Mar 2006
    Beiträge
    29
    Hallo!


    Erstmal danke für die Hinweise. Dass ich die Daten selbst umwandeln muss, hatte ich schon fast befürchtet. Ich denke ich werde das mit den Umwandlungs-APIs mal ausprobieren. Hat eventuell sogar jemand Beispiel-Code? Ich bin in C und diesen CCSID-Geschichten nicht so fit und das würde mir die Arbeit sicher sehr erleichtern.

    Was ich in dem Zusammenhang schon immer mal fragen wollte: Wo ist eigentlich der Unterschied zwischen Codepage und CCSID? Was bewirken die Eigentlich genau?

    Gruß, Titus

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Da gibt es keinen Unterschied.
    CCSID ist der AS/400-Begriff: CodedCharacterSetIdentification.
    Codepage (CP) wird in der PC und Unix-Welt verwendet.

    Die CCSID ist die interne Speicherungsform der Zeichen, so dass ein Ä immer den gleichen Hexwert annimmt.
    Beim Konvertieren von einer CCSID zur anderen wird der Hexwert ausgetauscht (EBCDIC->ASCII/ANSII, 273->297, usw.).
    Manchmal gibt es da halt Probleme, da es nicht immer entsprechende Zeichenzuordnungen gibt.
    Man spricht daher von sog. invarianten Zeichen, die in jeder CCSID identisch sind, bzw. von varianten Zeichen, die eben je nach CCSID unterschiedlich sind.
    Siehe hierzu: http://publib.boulder.ibm.com/iserie...ractersets.htm

    Im Gegensatz hierzu steht die CHRID (CharacterIdentification), die der Darstellung der Zeichen entspricht.
    In der PC-/Druck-Welt entspricht das dem Font (Schriftart).
    Ein Beispiel in der Windows-Welt kannst du z.B. mit dem Symbol-Font sehen. In diesem Font entspricht jeder Hexwert einem Symbol an Stelle eines Druckzeichens.

    Was deine IFS-Datei angeht, so würde ich Dieters Vorschlag anwenden.
    Wichtig nochmal, auch dein Job muss in einer EBCDIC-CCSID laufen, z.B. 273, sonst klappts wieder nicht.
    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

  9. #9
    Registriert seit
    Mar 2006
    Beiträge
    29
    Zitat Zitat von Fuerchau
    Was deine IFS-Datei angeht, so würde ich Dieters Vorschlag anwenden.
    Wichtig nochmal, auch dein Job muss in einer EBCDIC-CCSID laufen, z.B. 273, sonst klappts wieder nicht.
    Aha, alles klar. Mein Job läuft aber in CCSID 65535, aber als "Standard-ID des codierten Zeichensatzes" die 273. Ist das okay?


    Gruß, Titus

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nein. Die Standard-ID wirkt nicht immer.
    Ändere deinen Job auf CCSID(273).

    Die Ursache liegt in eurem Systemwert QCCSID der auf jeden Fall auf die Landessprache der AS/400 gesetzt sein sollte.
    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

  11. #11
    Registriert seit
    Oct 2003
    Beiträge
    192
    Da man sich damit aber auch Feinde in der normalen Anwendung machen kann (bei uns auch CCSID Normal auf 65535) würde ich für den Zugreifenden Job einfach die CCSID auf 273 ändern.

    Damit erspart man sich andere Baustellen aufzumachen

    Lg

    Rince

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    CCSID auf 65535 halte ich für einen konzeptionellen Fehler.
    Da ich ja die 5250-Sitzungen, Drucker usw. ja nicht ohne CCSID fahren kann, sollte dies passen.
    Gerade wenn mann mehrsprachig fährt und Datenaustausch betreibt (und wer macht heute noch Insellösungen) MUSS die System-CCSID auf einen korrekten Wert gestellt werden.
    Je nach Hauptsprache des Systems haben auch die Systemdateien immer eine CCSID.

    Ohne CCSID hat man mehr Baustellen als mit CCSID !!!!!
    Dann klappts auch mit den Umlauten.
    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

Similar Threads

  1. fopen() findet home-Verzeichnis nicht
    By Marsman in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 04-04-06, 12:28
  2. PDFs über Infoprint Server mit Codepage der SPLF
    By Heiko in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 15-06-05, 07:02
  3. Codepage für RPG Compiler
    By niceguy in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 09-06-05, 15:50
  4. ANSI Daten per FTP auf iSeries?
    By bocas400 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 16-11-04, 14:55
  5. Codepage und IFS
    By andigoering in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 26-07-01, 20:07

Berechtigungen

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