====================================================
DATA:
lv_file_tmp(100) TYPE c VALUE '/usr/sap/C11/DFU/f1401/out/',
lv_line(480) TYPE c VALUE 'CHF 0000’9000430000119119123’456',
lv_msg(100) TYPE c.
CONCATENATE lv_file_tmp sy-uzeit INTO lv_file_tmp.
OPEN DATASET lv_file_tmp FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE MESSAGE lv_msg.
TRANSFER lv_line TO lv_file_tmp.
CLOSE DATASET lv_file_tmp.
====================================================
Das Coding dumpt beim TRANSFER mit dem Fehler "A character set conversion is not possible.". Im Debugger habe ich gesehen dass das Problem am Zeichen " ’ " liegt.
Ich habe sämtliche mir bekannte Variationen und Zusätze für OPEN DATASET ausprobiert ohne Erfolg ausprobiert. Mit dem Zusatz IGNORING CONVERSION ERRORS dumpt es zwar nicht mehr, aber das Problem-Zeichen wird durch " # " ersetzt.
Wenn ich das File mit dem FuBa "DOWNLOAD" lokal downloade dann dumpt es nicht und das Problem-Zeichen wird auch korrekt in der Datei ausgegeben.
Ich benötige jedoch den Datei-Download auf dem Applikationsserver. Hab ihr noch eine Idee?
IN TEXT MODE ENCODING NON-UNICODE bedeutet, dass bei einem nicht Unicode-System der Zeichensatz des Applikationsservers bzw. bei einem Unicode-System der Zeichensatz laut Tabelle TCP0C zur Anwendung kommt. "`" ist nicht in diesem Zeichensatz enthalten. Anstatt IN TEXT MODE ENCODING NON-UNICODE ist es besser einen Unicode-Zeichensatz direkt anzugeben (z.B. IN TEXT MODE ENCODING UTF-8), wenn die Applikation, die die Textdatei weiter verarbeitet UTF-8 unterstützt).
vielen Dank für Dein Feedback! Deinen Ansatz hatte ich schon probiert bist mir der Kunde dann sagte dass das Folgesystem UTF-8 nicht verarbeiten kann :-(
Die Datei muss unbedingt im ANSI-Format sein.
Alternativ habe ich nun ein REPLACE von " ’ " mit dem ähnlichen Zeichen " ' " vor dem TRANSFER eingefügt und dann funktionierts... es ist zwar nicht die 100%-Lösung aber zumindest funktioniert es ohne Dump :-)