[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    60
    Hallo Fuerchau,

    das ist mir soweit schon klar. Aber da er erst beim WRITE auf das Satzformat abstürzt denke ich mal es ist ein Problem im System. Das Programm stürzt auch ab wenn ich dem DATEIFELD (mit 30A und CCSID(1208) definiert) ein einzelnes Zeichen wie 'Ä' zuweise da er anscheinend beim Write den 1 Byte Wert von 'Ä' in einen 2 Byte Wert konvertieren will. Die einzige Idee die mir jetzt dazu einfällt wäre es das Zeichen 'Ä' bereits vor der Zuweisung an das Dateifeld nach UTF-8 zu konvertieren, dann bräuchte er beim WRITE nichts mehr umsetzen. Wenn ich UCS-2 in der Datei verwende stürzt er auch nicht ab sondern schneidet die Zeichenfolge einfach ab wenn sie zu lang ist.

    Ausserdem finde ich es auch seltsam das die Hex-Zeichen bei UTF-8 in der Datei so gar nicht denen von Unicode.org entsprechen. Wenn ich z.B. das Zeichen 'Ä' per SQL in ein UTF-8 Dateifeld einfüge und mir den Hex-Code danach mit DSPPFM anzeige wird Hex '4A' ('Ä' in Codepage 273) nach Hex 'C384' konvertiert (entspricht laut den Tabellen von Unicode.org einem asiatischem Zeichen). Bei UTF-16 wird es korrekt nach Hex '00C4' konvertiert.

    Aber ich hab jetzt soweit mit dem Thema abgeschlossen. Mal abwarten was sich in nächster Zeit in der Richtung noch auf der iSeries tut.


    cu
    Martin

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.804
    Nun ja, da UTF-8 eine variable Speicherung ist, muss man beim Lesen andere Felder als beim Schreiben verwenden, was so bei RPGLE nun mal nicht geht.
    Erklärung:
    Ein Zeichen < x'7f' belegt in beide Richtungen nur 1 Byte, daher kann das Zielfeld genauso lang wie wie das Quellfeld sein. Für alle anderen Zeichen kommt es zur Verkürzung.
    Umgedreht muss das Quellfeld aber 4x kürzer sein, da ja im Zweifel eine Vervierfachung auftreten kann.
    Ausserdem muss man berücksichtigen, dass das PGM-Feld ggf. immer mit Leerzeichen aufgefüllt ist.
    Also kann ein Unicode-Feld nach UTF-8 bis zu 4x größer werden. Ein UTF-8-Feld von gleichgroß bis zu einem viertel.
    Die Lösung könnte ggf. ein VARLEN-Feld sein, wenn die aktuelle Länge beim Schreiben eben max. 1/4tel der verfügbaren Länge beträgt.

    Die Speicherung im UTF-8 macht also insoweit keinen Sinn, da Unicode hier sowieso die konsistentere Wahl ist.
    UTF-8 wird eher im Datenaustausch (Streamfiles) verwendet, die Speicherung immer in UNICODE.

    Nun zu deinem Konvertierungsproblem:
    Hexcodes im Programm werden in der Codepage des Job's interpretiert, dies gilt auch beim SQL/STRSQL. Wenn du also ein normales Zeichenfeld dem SQL übergibst dann ist das immer der Hexwert der JOB-CCSID (im Zweifel falls 65535 eben Deutsch 273, siehe auch QCCSID).
    Die Konvertierung in UTF-8 macht eben eine Konvertierung des aktuellen Hex-Wertes in UTF-8.
    UTF-16 oder auch Unicode sind per Definition aber weltweit gleich. Sprich dein 'Ä' ist bereits im korrekten Hexcode verwendet und kann daher auch korrekt in UTF-8 übersetzt werden.
    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. Antworten: 0
    Letzter Beitrag: 11-01-07, 10:30
  2. iSeries Highlight 2007, das iNN - Partner Camp in Bad Nauheim
    By Kilianski in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-10-06, 09:46
  3. Java, JDBC, iSeries und Tschechische/Russische/Chinesische Zeichen
    By Christian.Hesse in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 04-08-06, 11:04
  4. iSeries Access V5R3M0 ServicePacks nicht installierbar
    By Unwissender in forum NEWSboard Windows
    Antworten: 9
    Letzter Beitrag: 03-07-06, 16:01
  5. iNN - eNEWS - Das Wissen rund um die iSeries, kostenfrei !
    By Kilianski in forum Archiv NEWSboard Events
    Antworten: 1
    Letzter Beitrag: 10-05-06, 13:44

Berechtigungen

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