-
Textdatei mit Umlauten auf IFS
Guten Morgen zusammen
Ich hätte da mal wieder eine Frage zu Sonderzeichen und CCSIDs.
Folgende Ausgangssituation:
txt-Datei auf dem IFS mit CCSID 850 (wird aus einem SAP-System exportiert)
CCSID der PF: 500
CCSID des Jobs: 500
Nun habe ich das Problem, dass die Sonderzeichen nicht richtig in der Zieltabelle ankommen.
Geöffnet/gelesen wird die txt-Datei mit den Befehlen fopen und fgets.
Ich habe bereits mit den unterschiedlichen CCSIDs ausprobiert. Wenn ich die txt-Datei auf CCSID 1208 stelle werden mir zumindest bei der Anzeige über WRKLNK die Sonderzeichen angezeigt. Das Import-Programm läuft dann allerdings wegen einem Fehler in der Umsetzung auf Fehler.
Reichen die Informationen so um mir eine Hilfestellung zu geben?
Danke im Voraus
Oliver
-
Also 850 (ASCII) wird eigentlich überhaupt nicht mehr verwendet sondern 1252 (ANSI west).
Ursache der 850 ist wohl eine Netserver-Einstellung der Default-CCSID auf 850 statt 1252.
Wenn du die Datei mit Windows Notepad oder Notepad++ problemlos anzeigen kannst, sollte 1252 richtig sein.
1208 ist UTF-8 und eher unwahrscheinlich.
Per CHGATR kannst du die CCSID der IFS auf 1252 ändern und noch mal probieren.
Beim CPYFRMIMPF/CPYFRMSTMF kannst du die CCSID 1252 auch explizit angeben.
-
Was für Parameter stehen denn beim fopen?
Dem Verhalten nach klingt es so, als ob die Datei tatsächlich in UTF-8 (CCSID 1208) geschrieben worden wäre.
Wenn das Programm was Anderes als 1208 erwartet, ist das natürlich blöd und man müsste die Datei vorher am besten umkopieren; das Ändern des (richtigen) Attributs auf was Anderes (ohne den Inhalt zu ändern) reicht da nicht.
-
Der fopen/fread konvertiert beim Lesen die Daten von der Stream-CCSID in die CCSID des Parameters fopen (z.B. 273/1141).
Also ist die IFS-Datei mittels CHGATR auf die korrekte CCSID zu setzen (von 850 auf z.B. 1208/1252).
-
Vielen Dank für die schnellen Antworten.
Die Lösung war allerdings nicht dabei.
Hier nochmal etwas "bildlicher:
CCSID der bereitgestellten Datei: 1252
Wenn ich mir diese Mit Notepad++ anschaue sehen die Datensätze folgendermassen aus:
Wenn ich über WRKLNK mir die Datei anschaue, sehe ich das:
Und so sieht das dann nachher auch in der Zieltabelle aus.
Ein manuelles bearbeiten funktioniert, ist aber nicht praktikabel, da die Datei täglich neu erstellt wird.
Mein letzter Ansatzpunkt wäre, die Sonderzeichen im Programm manuell umzusetzen.
-
Das sieht nach 2-Byte-Darstellung aus, wie es für UTF-8 typisch ist.
Wenn Du uns die Hex-Darstellung (F10) geschickt hättest, könnte man es hundertprozentig sagen.
Das "ö" wäre C3B6, und das "ä" C3A4.
Und was der fopen macht, kann man ihm mit Flags (bzw. Bits) ganz genau sagen.
Wenn die Datei CCSID 1208 hat und das Importieren nicht hinhaut, muss es eigentlich an den Flags beim fopen liegen.
-
Erneut vielen Dank für dir prompte Antwort.
(Ich liebe es, wenn ein Forum funktioniert)
In der Hex-Darstellung steht für das ö tatsächlich C3B6. Demnach also definitiv UTF-8.
Der fopen ist in einer externen Prozedur gekapselt. Da möchte ich im Livesystem ungerne Änderungen vornehmen. Der Befehl wird auch ledglich mit dem Parameter "r" aufgerufen. Eine CCSID wird dort gar nicht verwendet.
Zum Testen habe ich das Import-Program kopiert und führe den fopen dort direkt aus. Aber wenn ich dort den Parameter o_ccsid auf 1141 setze führt das auch nicht zum Erfolg.
Ich werde jetzt mal mit dem CPY-Befehl testen...
-
UTF-8 hat CCSID 1208.
Zitat von OSmeilus
Zum Testen habe ich das Import-Program kopiert und führe den fopen dort direkt aus. Aber wenn ich dort den Parameter o_ccsid auf 1141 setze führt das auch nicht zum Erfolg.
-
Du musst per CHGATR die CCSID der IFS-Datei auf 1208 setzen.
Dann öffnet man die IFS-Datei mit 1200 (Feld-Typ C für UCS2) oder mit 1141/273 für westeuropäisch EBCDIC.
Damit wird die Datei beim Lesen von der File-CCSID (Attribut) in die gewünschte CCSID konvertiert!
Die CCSID beim Open soll mir den Code so liefern wie ich ihn benötige, nicht wie die Daten ihn hat.
Dies ist analog zu sehen wie die CCSID einer PF und der CCSID des Jobs.
-
Prima!
So klappt es.
Und das Modul mit dem gekapselten fopen wird auch nur von diesem einen Programm aufgerufen. Somit kann ich dort auch die Änderung für den zusätzlichen Parameter o_ccsid einbauen.
Vielen Dank!
Similar Threads
-
By hteufl in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 20-04-15, 09:34
-
By jimknopf99 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 27-01-15, 12:28
-
By SourceCoder in forum NEWSboard Java
Antworten: 13
Letzter Beitrag: 13-03-14, 12:38
-
By Peter Kosel in forum NEWSboard Drucker
Antworten: 3
Letzter Beitrag: 29-05-01, 15:34
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks