Verschlüsselter ZPL Code in ISO-8859-1 umwandeln

4. Januar 2019 12:29

Hallo zusammen,

ich hänge hier an einem Problem. Ich bekomme über einen Webservice ZPL Code, den ich auf einem Zebra Drucker drucken muss.

Ich bekomme den ZPL Code verschlüsselt (Base64) und zwar in UTF-8. UTF-8 versteht unser Drucker allerdings nicht, daher muss ich den Code nach dem entschlüsseln in ISO-8859-1 umwandeln. Noch dazu muss ich den Zeichensatz im ZPL Code umstellen, dass heißt den Text 'CI28' durch 'CI6' ersetzen. Am Ende brauche ich den kompletten Code in einer Textvariable um ihn zu drucken.

Aus dem Webservice/XML habe ich den verschlüsselten Code in eine Textvariable ZPLCodeBase64Encoded gepackt.

Ich dachte die Entschlüsselung könnte schon mal so laufen:
Code:
DotNetArray := DotNetConvert.FromBase64String(ZPLCodeBase64Encoded);


Wenn ich es richtig verstehe, dann könnte ich die Konvertierung so machen:
Code:
DotNetArray := DotNetTextEncoding.Convert(DotNetTextEncoding.UTF8, DotNetTextEncoding.GetEncoding('iso-8859-1'), DotNetArray);


Jetzt weiß ich allerdings schon nicht, wie ich aus dem Array wieder einen String bekomme, um das zu machen:
Code:
ZPLCodeDecodedFinal := DotNetString.Replace('CI28', 'CI6');


Ach, ich sollte natürlich noch die Variablen angeben:
Code:
Name   DataType   Subtype   Length
ZPLCodeBase64Encoded   Text      
ZPLCodeDecodedFinal   Text      
DotNetString   DotNet   System.String.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
DotNetArray   DotNet   System.Array.'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
DotNetConvert   DotNet   System.Convert.'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
DotNetTextEncoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   


Aber vielleicht bin ich auch schon komplett falsch unterwegs. Was ich schon ausprobierte habe, ist dieser Weg:

Code:
DotNetArray := DotNetConvert.FromBase64String(ZPLCodeBase64Encoded );
ZPLCodeDecodedFinal := DotNetTextEncoding.GetEncoding('iso-8859-1').GetString(DotNetArray);
DotNetString:= ZPLCodeDecodedFinal ;
ZPLCodeDecodedFinal := DotNetString.Replace('CI28', 'CI6');


Dabei werden aber die speziellen Zeichen (wie Umlaute) komplett zerstört. Ich gehe davon aus, dass ich so keinen Konvertierung durchführe.

Kann mir da jemand auf die Sprünge helfen?

Gruß
sas_fisch