Unterschiedliches Streamschreibverhalten NAV 2017..NAV 2009

5. Oktober 2017 10:53

Beitrag abgeteilt von hier.

Natalie hat geschrieben:Irgendwann <= NAV 2016 hat sich geändert, wie NAV per OutStream in Dateien schreibt.

Hier mal ein anderes Beispiel zu diesem Umstand.
Bis einschließlich NAV 2009 ist NAV ja bekanntlich nicht unicodefähig, aber man kann sich (im begrenzten Rahmen :wink: ) die UTF-Sonderzeichen, hier im Bereich Hexadezimal C3 + xx selbst zusammenstellen und daraus eine UTF8-Datei (ohne BOM) exportieren.

UTF8fromCC.png

Das funktioniert auch in NAV 2009 einwandfrei, es wird eine UTF-8-Datei mit korrekten Sonderzeichen erzeugt. Komplett identischer Code (abgesehen vom 3-Tier-Dateihandling) liefert aber in NAV 2017 - NAV 2013 eine ANSI-Datei mit 2 getrennten Zeichen, statt des 2-Byte-UTF-8-Zeichens aus NAV 2009 heraus.
UTF8test1.png



Die Unterschiede im HEX-Viewer
UTF8testHexView.png


Im Anhang sind 2 Testcodeunits für NAV 2009 CC und NAV 2017- NAV 2013, mit denen das Verhalten reproduziert werden kann. Besonders betroffen ist hier NAV 2013, weil man erst ab NAV 2013 R2 ja die optionale Textencodingeinstellung beim Dateiexport verwenden kann und auch erst dann diese Behelfsfunktionen nicht mehr benötigt, die wiederum in NAV 2013 nicht mehr wie in NAV 2009 eingesetzt werden können.

Aus dem Char New[1] = 195 = Ã in NAV 2009 wird beim Export aus aktuellen Versionen ein Ç was aus Posision 199 in ANSI liegt und wiederum auf 195 in OEM850.
Ein à läßt sich über New[1] = 381 statt 195 zwar im Export aus den aktuellen Version durchaus erzeugen, aber als UTF-8-Format werden diese Dateien auch so nicht interpretiert, weil die anderen Zeichen in New[2] auch alle verändert werden und so die Kombination aus beiden zusammen jeweils kein UTF-8-Zeichenmuster ergibt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Unterschiedliches Streamschreibverhalten NAV 2017...NAV

5. Oktober 2017 17:28

Durch Verändern sämtlicher Werte kann man diese Funktion weitgehend auch für NAV 2013 umschreiben. Das à (um den C3-Sonderzeichenblock im Unicodegerüst anzusprechen) kann statt über 195 mittels 381 erzeugt werden.
Leider tanzt das ü wie schon hier aus der Reihe.
Um ein ü für die UTF-8-Datei direkt zu erzeugen, müsste die Kombination ü dort stehen, das ¼-Zeichen lässt sich aber mit aktuellen Clients scheinbar nicht mehr so erzeugen wie noch in NAV 2009, obwohl es natürlich weiterhin auf Position 188 in der Charmap liegt.
Code:
EncodeUTF8AbNAV2013(Para : Char) Result : Char
// Codepoint Hex C3 Dec 381 + x
CASE Para OF
  'Ä' : Result := 228;
  'Ö' : Result := 251;
  'Ü' : Result := 163;
  'ß' : Result := 401;
  'ä' : Result := 241;
  'ö' : Result := 194;
  'ü' : Result := ???;
END;