![]() |
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.
|
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Zitat:
|
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. |
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Zitat:
![]() |
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Wenn ich mich recht erinnere, waren Adriano's Gründe aber andere.
|
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? |
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Zitat:
LG Incocnito |
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Zitat:
|
AW: UTF8 und UTF8 mit BOM und dann auch noch Java
Nimm StringStream, der kennt AFAIK keine BOM.
|
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:
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.
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; 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 14:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz