Delphi-PRAXiS
Seite 3 von 4     123 4   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UTF8 und UTF8 mit BOM und dann auch noch Java (https://www.delphipraxis.net/207497-utf8-und-utf8-mit-bom-und-dann-auch-noch-java.html)

Redeemer 30. Mär 2021 17:04

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Nicht schlimm. WriteBOM ist nicht so offensichtlich, da es an einer Stelle definiert ist, an der man es nicht erwartet. Man würde eher die Existenz von TEncodingUTF8NoBOM erwarten, aber TEncoding-Erben können keine „Header“ erstellen (da sie für den Einsatz mit – in sich jedoch gültigen – Teilstrings gedacht sind), oder einen zusätzlichen Parameter bei SaveToFile/SaveToStream. Es fehlt auch z.B. bei TStringStream.

TiGü 30. Mär 2021 19:52

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Zitat:

Zitat von creehawk (Beitrag 1486352)
Ich gehe jetzt erstmal Holz hacken. Oder die Wiese hinter HAus umgraben. Oder doch ins Kloster?

Warum nicht alles drei? :-D

philipp.hofmann 31. Mär 2021 06:48

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Du musst deinen Arbeitsansatz ändern:
- Frage im Forum stellen
- Holzhacken gehen
- Antwort im Forum lesen
- kurz den Kopf schütteln
- weiter programmieren

Dann hast du eine Lösung für dein Problem und einen Hof voll gehacktem Holz und bist ausgeglichener.

haentschman 31. Mär 2021 07:04

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Zitat:

Ich gehe jetzt erstmal Holz hacken.
Ihttps://www.youtube.com/watch?v=MsggONi5frI :stupid::lol:

Uwe Raabe 31. Mär 2021 08:14

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Wenn ich mich recht erinnere, waren Adriano's Gründe aber andere.

AndyDF 31. Mär 2021 15:44

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Habe gerade aktuell ein sehr ähnliches Thema. Ich erzeuge eine Textdatei per
Delphi-Quellcode:
StringList.SaveToFile(Filename,TEncoding.UTF8);

In diesem Fall darf aber kein BOM enthalten sein. Habe auch gleich das WriteBOM gefunden und gesetzt.
Das geht auch wunderbar unter Windows aber leider nicht unter Android.
Da wird der Textdatei immer der BOM angestellt. Es geht sogar soweit, dass bei WriteBOM := true bei Android gleich zwei BOM´s angehängt sind.

Hat hier jemand eine Idee dazu?

Incocnito 31. Mär 2021 15:53

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Zitat:

Zitat von AndyDF (Beitrag 1486393)
Habe gerade aktuell ein sehr ähnliches Thema. Ich erzeuge eine Textdatei per
Delphi-Quellcode:
TStringList.SaveToFile(Data,TEncoding.UTF8);

In diesem Fall darf aber kein BOM enthalten sein. Habe auch gleich das WriteBOM gefunden und gesetzt.
Das geht auch wunderbar unter Windows aber leider nicht unter Android.
Da wird der Textdatei immer der BOM angestellt. Es geht sogar soweit, dass bei WriteBOM := true bei Android gleich zwei BOM´s angehängt sind.

Hat hier jemand eine Idee dazu?

Ist jetzt aber nicht so, dass "Data" bereits schon ein BOM enthält, oder? 🙈

LG Incocnito

AndyDF 31. Mär 2021 15:55

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Zitat:

Zitat von Incocnito (Beitrag 1486396)
Ist jetzt aber nicht so, dass "Data" bereits schon ein BOM enthält, oder? 🙈
LG Incocnito

Nein - natürlich nicht. Habs in meinem Post richtig gestellt. :-)

Redeemer 1. Apr 2021 10:14

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Nimm StringStream, der kennt AFAIK keine BOM.

Bbommel 1. Apr 2021 10:25

AW: UTF8 und UTF8 mit BOM und dann auch noch Java
 
Merkwürdig ist das aber schon, wenn man sich das SaveToFile von der StringList anschaut, dann läuft das letztlich über SaveToStream und das sieht so aus:

Delphi-Quellcode:
procedure TStrings.SaveToStream(Stream: TStream; Encoding: TEncoding);
var
  Buffer, Preamble: TBytes;
begin
  if Encoding = nil then
    Encoding := FDefaultEncoding;
  Buffer := Encoding.GetBytes(GetTextStr);
  if WriteBOM then
  begin
    Preamble := Encoding.GetPreamble;
    if Length(Preamble) > 0 then
      Stream.WriteBuffer(Preamble, Length(Preamble));
  end;
  Stream.WriteBuffer(Buffer, Length(Buffer));
end;
Da gibt es ja nicht ansatzweise eine andere Behandlung für Android und vor allem auch nichts, weshalb da plötzlich der BOM doppelt drinsteht.

Müsste man vielleicht mal mit dem Debugger durchsteppen, um zu schauen, wo denn das BOM im Buffer/Ergebnis plötzlich auftaucht oder ob es nicht doch schon vorher irgendwie dort reinkommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Seite 3 von 4     123 4   

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