AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

himXML speichern mit BOM

Ein Thema von haentschman · begonnen am 16. Feb 2022 · letzter Beitrag vom 18. Feb 2022
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

himXML speichern mit BOM

  Alt 16. Feb 2022, 09:29
Hallöle...

Mein XML (Encoding: UTF-8) soll mal ein BOM bekommen...
XML.SaveToFile(Name) In den Options ist "xoDontWriteBOM" nicht angegeben. (Standard) Die Datei hat aber kein BOM.

Header der gespeicherten Datei:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Messages>
  <Message>
himXML.pas:
Delphi-Quellcode:
Procedure TXWriter.WriteBOM(AllowUTF8BOM: Boolean = False);
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and (xoDontWriteBOM in _Options)
        and ((_Encoding <> xeUTF8) or AllowUTF8BOM) Then Begin
        Flush;
        _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
     End;
   End;
and (xoDontWriteBOM in _Options) damit kann er nie den BOM schreiben? Oder?

Was muß ich einstellen?

Danke...

Geändert von haentschman (16. Feb 2022 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#2

AW: himXML speichern mit BOM

  Alt 16. Feb 2022, 13:43
Also vom Ablauf her müsste an dieser Stelle die Option mit "xoWriteBOM" benannt werden.
Das ist auch kürzer und für den menschlichen Verstand einfacher zu erfassen als negierte Aussagen.

Wenn man die Optionen ändert, müssten natürlich alle Stellen geprüft werden, die davon abhängen.
Insbesondere auch die Vorbelegung der Option.

Ich würde in der Methode mit einer Zwischenvariable arbeiten, was übersichtlicher ist:
Delphi-Quellcode:
if (xoWriteBOM in _Options) and (_Encoding <> xeUTF8) or AllowUTF8BOM) then
begin
  sBuffer := XMLEncodingData[_Encoding].BOM;
  if Length(sBuffer) > 0 then
    _Stream.WriteBuffer(sBuffer[1], Length(sBuffer));
end;
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: himXML speichern mit BOM

  Alt 16. Feb 2022, 13:58
Ja ich würde auch sagen, dass da noch ein not davor hin gehört. Also:

Delphi-Quellcode:
Procedure TXWriter.WriteBOM(AllowUTF8BOM: Boolean = False);
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and not (xoDontWriteBOM in _Options)
        and ((_Encoding <> xeUTF8) or AllowUTF8BOM) Then Begin
        Flush;
        _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
     End;
   End;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

AW: himXML speichern mit BOM

  Alt 16. Feb 2022, 14:12
Danke...
Zitat:
Ja ich würde auch sagen, dass da noch ein not davor hin gehört
Ich habe auch versucht die Option in Option hinzufügen. Gleiches Ergebnis.

An die procedure habe ich versucht Breakpoints zu setzen...egal was ich gemacht habe...immer X as wäre die procedure nie in Verwendung. Auch ins Projekt aufgenommen.



Warten wir mal, was der Verursacher dazu meint...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: himXML speichern mit BOM

  Alt 17. Feb 2022, 11:00
Hallöle...

@himitsu: Ist dein Postfach voll? Keine Antwort auf meine PN?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: himXML speichern mit BOM

  Alt 17. Feb 2022, 15:30
joar

muß mir später mal in Ruhe ansehn.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: himXML speichern mit BOM

  Alt 17. Feb 2022, 15:38
Danke...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

AW: himXML speichern mit BOM

  Alt 18. Feb 2022, 16:54
Hallöle...

Änderungen:
* BOM ist nun auch bei UTF8 Standard.
* wenn BOM nicht benötigt:
Delphi-Quellcode:
XML.Options := XML.Options + [xoDontWriteBOM];
...
Änderungen in himXML.pas ab Zeile 11817:
Delphi-Quellcode:
Procedure TXWriter.WriteBOM;
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and (not(xoDontWriteBOM in _Options)) Then Begin
      Flush;
      _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
      End;
    End;
PS: (AllowUTF8BOM: Boolean = False); wurde nie gesetzt...immer False.

...bitteschön.
Miniaturansicht angehängter Grafiken
bom.png  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz