Anmelden

View Full Version : Zeichenverschiebung durch Umstellung auf UTF-8 (FTP)



ubas
17-04-18, 14:19
Hallo zusammen,

wir erhalten von einem unserer Kunden Daten per FTP direkt in eine Bibliothek. Er hat jetzt auf UTF-8 umgestellt, was dazu führt das die Umlaute und Sonderzeichen mit zwei Hex-Werten belegt sind und somit eine Verschiebung der restlichen Daten im Satz erfolgt. Ich habe schon versucht durch hin- und herkopieren in Dateien mit unterschiedlichen CCSID die Sache im Griff zu kriegen. Leider erfolglos. Gibt es da eine schlanke Lösung für?

Systemwerte:
FTPATR CCSID 819
PF CCSID 273

Beste Grüße
ubas

Fuerchau
17-04-18, 16:54
Du musst die Daten per SQL umcasten:
a) wenn das Feld CCSID 65535 hat

select
cast(cast(Feld as char(nn) ccsid 1208) as char(nn) ccsid 273)
from MyFile

b) wenn das Feld eine andere CCSID hat

select
cast(cast(cast(Feld as char(nn)) ccsid 65535) as char(nn) ccsid 1208) as char(nn) ccsid 273)
from MyFile

ubas
18-04-18, 13:03
Vielen Dank für die rasche Antwort doch leider erfolglos.
Ich bin nicht der SQL-Spezi und habe es trotzdem mal probiert. Wobei ich nicht weiß wofür das nn in char steht.
Habe folgenden Fehler erhalten:
select
cast(cast(cast(file768 as char(01) ccsid 65535) as char(01)
ccsid 1208) as char(01) ccsid 273) from boltetest/file768
Zeichenumsetzung zwischen CCSID 65535 und CCSID 1208 ungültig.

Dateibeschreibung:
ID des codierten Zeichensatzes . . . . . . : CCSID 65535
Sprachen-ID . . . . . . . . . . . . . . . . : LANGID DEU
Teildateibeschreibung
Teildatei . . . . . . . . . . . . . . . . . : MBR FILE768
*...+....1....+....2....+....3....+....4....+....5 ....+....6.
FILE768 1 768 2BF1930DCD677
Text . . . . . . . . . . . . . . . . . . . :
Gesamtanzahl Formate . . . . . . . . . . . . : 1
Gesamtanzahl Felder . . . . . . . . . . . . : 1
Gesamtlänge Datensatz . . . . . . . . . . . : 768

Fuerchau
18-04-18, 13:24
Das (nn) steht für die ursprüngliche Länge des Feldes, in deinem Fall also 768.
Aber das System lehnt ja die Umsetzung von Binär(65535) nach UTF8 (1208) leider ab.
Dann geht das so leider überhaupt nicht.

Dein Problem ist, dass das Feld bzw. die Datei bereits mit CCSID 273 erstellt ist und sich die Daten somit nicht in UTF8 umstellen lassen.
Der Code in der Datei ist ja bereits EBCDIC und somit nicht in UTF8 (ASCII) zurückkonvertierbar.

Du musst die Daten vom Kunden nicht in eine PF sondern ins IFS per FTP übertragen lassen.
Dann kannst du per CHGATR die IFS-Datei auf 1208 setzen und per CPYTOIMPF in eine PF übertragen lassen.

Alternativ kannst du versuchen, die Transfer-PF statt mit CCSID 273 auf Feldebene (per DDS, besser per SQL und CREATE TABLE) mit 1208 zu erstellen.
Ich glaube aber, dass der FTP-Server der AS/400 dies dann nicht übertragen kann.

ubas
18-04-18, 14:26
Das mit dem IFS bedeutet zwar alles umzubauen, aber es läuft.
Vielen Dank und Gruß