PDA

View Full Version : Unicode - Etikettendruck zpl2 - CGIDEV2



Seiten : 1 [2]

Drittaccount
06-02-14, 10:39
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?



^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^F S

^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

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;">До свидания</code>

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

Drittaccount
06-02-14, 10:47
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 ...

Drittaccount
06-02-14, 12:09
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:


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.

Fuerchau
06-02-14, 13:06
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.ä.

B.Hauser
06-02-14, 16:28
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

Drittaccount
06-02-14, 18:29
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!