[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Und warum schreibst Du das Ding nicht gleich mit embedded SQL als Unicode (allerdings mit CCSID 13488) file ins IFS?

    PHP-Code:
    D MyDBCLOBFile    S                   SQLTYPE(DBCLOB_File)       
                       
    D MyUCS2Var       S             50C   Varying                                       
    D MyCharVar       S             50A   Varying                                       
    D CRLF            S              2A   Inz
    (x'0D25')                                  
     
    //**********************************************************************************
    C/Exec SQL   Set Option  Commit=*NoneDatFmt=*ISOTimFmt=*ISO,                    
    C+                       Naming=*SYS,  CloSQLCsr=*EndActGrp                         
    C
    /End-Exec                                                                          
     
    /FREE                                                                              
        MyDBCLOBFile_Name 
    '/home/Hauser/TST_Unicode.txt';                             
        
    MyDBCLOBFile_NL   = %Len(%Trim(MyDBCLOBFile_Name));                                    
        
    MyDBCLOBFile_FO   SQFOVR;                            //Create/Replace IFS File
        
        
    MyUCS2Var = %UCS2('First Text passed in Unicode');                        
        
    Exec SQL Set :MyDBCLOBFile = :MyUCS2Var Concat :CRLF;                     
        If 
    SQLCODE < *Zeros;                                                      
           
    //Handle Error                                                         
        
    EndIf;                                                                    
                                                                                    
        
    MyDBCLOBFile_FO   SQFAPP;                            //Add to IFS File  
        
        
    MyCharVar 'Second Text passed as Character';                            
        
    Exec SQL Set :MyDBCLOBFile = :MyCharVar concat :CRLF;                     
        If 
    SQLCODE < *Zeros;                                                      
           
    //Handle Error                                                         
        
    EndIf;                                                                    
                                                                                    
        
    Exec SQL Set :MyDBCLOBFile 'Third Text passed dirctly' concat :CRLF;    
        If 
    SQLCODE < *Zeros;                                                      
           
    //Handle Error                                                         
        
    EndIf;                                                                    
      *
    InLR       = *On;                                                          
     /
    END-FREE 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.749
    Weil die IFS-Datei so nicht an den Drucker geschickt werden kann, siehe obigen Link zur ZPL-Druckersprache.
    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
    Feb 2001
    Beiträge
    20.749
    Nachtrag:
    Allerdings kann ich in SQL mir die UCS2-Daten (cast auf CCSID 13488!) mittels der Funktion HEX(Feld) direkt für die ZPL-Sprache aufbereiten lassen.
    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

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.016
    @Birgitta:

    Wo wird denn in Deinem Beispiel festgelegt welche CCSID die Textdatei haben soll? Wenn ich Dein Beispiel ausführe, wird die Textdatei mit CCSID 273 erstellt und der Unicode-Text ist nicht darin enthalten.

    Gruß,
    KM

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Wo wird denn in Deinem Beispiel festgelegt welche CCSID die Textdatei haben soll? Wenn ich Dein Beispiel ausführe, wird die Textdatei mit CCSID 273 erstellt und der Unicode-Text ist nicht darin enthalten.
    Die Character Set Id wird durch den SQLTYPE(DBCLOB_FILE) festgelegt, d.h. auf 13488.
    Allerdings funktioniert die automatische Umseztung nicht von CCSID 65535.
    Im RPG-Programm müsste dann der Text vor dem Schreiben (SET-Statement) in die entsprechende CCSID konvertiert werden.
    Ansonsten kann man immernoch in RPG den Text entsprechend aufbereiten und ohne Konvertierung, als BLOB_FILE ausgeben.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    39
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nachtrag:
    Allerdings kann ich in SQL mir die UCS2-Daten (cast auf CCSID 13488!) mittels der Funktion HEX(Feld) direkt für die ZPL-Sprache aufbereiten lassen.
    ... +
    http://stackoverflow.com/questions/1...on-zpl-printer

    Nehmen wir mal das Beispiel und versuchen eine Zeile zu ergänzen ...


    Code:
    SELECT CAST(XXUNIC as CHAR(50) CCSID 37),                 
    HEX(trim(CAST(XXUNIC as GRAPHIC(50) CCSID 13488))) FROM 
    LIB/FILE WHERE XXUSPR = 'DE'

    Stimmt der Cast so?
    CAST(XXUNIC as GRAPHIC(50) CCSID 13488)) hat selben inhalt wie XXUNIC in der SQL Ansicht


    Text: werden.
    Hex: 00770065007200640065006E002E


    ...
    00770065007200640065006E002E -> _00_77_00_65_00_72_00_64_00_65_00_6E_00_2E


    Code:
    ^XA
    ^LH100,150
    ^CWT,CAL000.FNT
    ^CFT,30,30
    ^CI28
    ^FT0,0^FH^FDTesting 1 2 3^FS
    ^FT0,50^FH^FD_D0_94_D0_BE _D1_81_D0_B2_D0_B8_D0_B4_D0_B0_D0_BD_D0_B8_D1_8F^FS
    ^FT0,100^FH^FD_00_77_00_65_00_72_00_64_00_65_00_6E_00_2E^FS
    ^FT0,150^B3^FDAAA001^FS
    ^XZ

    da kommt nix raus.
    mfg - Drittaccount

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.749
    ich denke mal, wie im Beispiel, je UCS2-zeichen ein leerzeichen dazwischen.
    Ansonsten mal deinen Lieferanten fragen, ob dein Modell das überhaupt unterstützt.
    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

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    39
    Zitat Zitat von Fuerchau Beitrag anzeigen
    ich denke mal, wie im Beispiel, je UCS2-zeichen ein leerzeichen dazwischen.
    Ansonsten mal deinen Lieferanten fragen, ob dein Modell das überhaupt unterstützt.
    Der Drucker (ZM400 - V.53.17.9Z) unterstützt die Zeichen ...

    Hmm Leerzeichen? Oder den Unterstich?

    Code:
    ^XA
    ^LH100,150
    ^CWT,CAL000.FNT
    ^CFT,30,30
    ^CI28
    ^FT0,0^FH^FDTesting 1 2 3^FS
    ^FT0,50^FH^FD_D0_94_D0_BE _D1_81_D0_B2_D0_B8_D0_B4_D0_B0_D0_BD_D0_B8_D1_8F^FS
    
    ^FT0,100^FH^FD_00_77_00_65_00_72_00_64_00_65_00_6E_00_2E^FS    <----------
    
    ^FT0,150^B3^FDAAA001^FS
    ^XZ
    До свидания

    ... das aus dem Beispiel bekomme ich raus ... nur die eingefügte Zeile wird nicht gedruckt.
    Scheint als ob der CAST/HEX was falsches bringt.
    mfg - Drittaccount

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    39
    Gerade nochmal getestet ...

    ^FT0,100^FH^FD_00_77_00_65_00_72_00_64_00_65_00_6E _00_2E^FS

    geht nicht, aber folgendes geht:


    ^FT0,100^FH^FD_77_65_72_64_65_6E_2E^FS

    die _00 muss ich wohl noch entfernen ...
    mfg - Drittaccount

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    39
    Wenn ich jetzt allerdings die Sprache BG in HEX umwandle kommt folgendes:

    043204330440043004340435043D0438

    Da kann ich ja nicht die _04 entfernen, weil sonst was anderes rauskommt:

    ^FT0,050^FH^FD_04_32_04_33_04_40_04_30_04_34_04_35 _04_3D_04_38^FS
    ^FT0,100^FH^FD_32_33_40_30_34_35_3D_38^FS

    Ausgabe je: 23@045=8

    Das wäre die richtige Ausgabe:

    вградени

    ^FT0,100^FH^FD_d0_b2_d0_b3_d1_80_d0_b0_d0_b4_d0_b5 _d0_bd_d0_b8^FS

    der klappt wie folgt:

    Code:
    SELECT HEX(trim(CAST(XXUNIC as CHAR(150) CCSID 1208))) FROM LIB/FILE WHERE XXUSPR = 'BG'
    Bei DE als Sprache kommt dann 77657264656E2E ohne die 00 dazwischen raus. Scheint also zu passen.
    mfg - Drittaccount

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.749
    Das ist ja genau das Problem bei "Misch-CCSID".
    UCS2 ist ein 2-Byte-Code, der z.B. von 0000 bis 00FF den westeuropäischen Zeichensatz enthält.
    Dein kyrillisch ist dann halt im Bereich 0400 bis 04FF.

    Ich vermute mal, der Hexstring für ZPL muss auch als 4-Hexbytes übergeben werden (das Entfernen der 00 würde dann entfallen, also "_XXYY_XXYY...".
    Was anderes macht auch keinen Sinn, ähnliche Notationen von Unicodewerten kennt man auch in HTML u.ä.
    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

  12. #12
    Registriert seit
    Sep 2005
    Beiträge
    39

    Thumbs up

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich vermute mal, der Hexstring für ZPL muss auch als 4-Hexbytes übergeben werden (das Entfernen der 00 würde dann entfallen, also "_XXYY_XXYY...".
    Was anderes macht auch keinen Sinn, ähnliche Notationen von Unicodewerten kennt man auch in HTML u.ä.
    Der ^FH zpl-Befehl nimmt nur 2-Hexbytes.
    Im zpl Spool wird die Sprache mit dem Befehl ^CI28 auf (UTF-8 encoding) gestellt.
    Der Cast von 1200 auf 1208 wandelt die 4 Stellen in die benötigten richtigen 2 Stellen um.
    Test mit osteuropäischen und asiatischen Sprachen (mit entsprechender Schrift) hat funktioniert.


    Vielen Dank nochmal für die Vorschläge und Lösungsansätze!
    mfg - Drittaccount

Similar Threads

  1. Neues Release ArdGate unterstützt Unicode
    By BenderD in forum NEWSboard Server Software
    Antworten: 1
    Letzter Beitrag: 05-03-15, 09:53

Berechtigungen

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