AGB  ·  Datenschutz  ·  Impressum  







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

Textdatei utf8-kodiert speichern!

Ein Thema von SirRobert · begonnen am 6. Sep 2006 · letzter Beitrag vom 11. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
SirRobert

Registriert seit: 24. Aug 2006
Ort: Düsseldorf
18 Beiträge
 
Delphi 6 Enterprise
 
#1

Textdatei utf8-kodiert speichern!

  Alt 6. Sep 2006, 13:12
Hallo zusammen,

ich habe eine Frage:
wie kann ich erzwingen (unabhängig vom Inhalt), dass ein String in eine UTF-8
codierte Textdatei gespeichert wird. Ich habe bereits mit Utf8Encode(mystr),
dann write(f, mystr) versucht, doch die Textdatei wird immer als ANSI gespeichert.

Für Eure Hilfe bedanke ich mich im voraus!


Grüße

Robert
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Textdatei utf8-kodiert speichern!

  Alt 6. Sep 2006, 13:18
Wie siehst du das es nur ANSI wäre?
Doch etwa nicht mit Notepad?
Für Notepad benötigst du nocht den Byte Order Mark für eine UTF8-Codierte Datei.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
SirRobert

Registriert seit: 24. Aug 2006
Ort: Düsseldorf
18 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Textdatei utf8-kodiert speichern!

  Alt 6. Sep 2006, 13:26
Hallo Bernhard,


doch, im Notepad!
Und diesen Byte Order Mark für eine UTF8-Codierte Datei bekomme ich
wie hin?

Übrigens, Danke für die schnelle Antwort!


Robert
  Mit Zitat antworten Zitat
SirRobert

Registriert seit: 24. Aug 2006
Ort: Düsseldorf
18 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Textdatei utf8-kodiert speichern!

  Alt 6. Sep 2006, 13:49
Hat sich erledigt!

Schöne Grüße


Robert
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#5

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 10:50
Verdammt! Und genau hier hätte ich gerne gewusst, wie sich das erledigt hat.

Ich stehe vor einem sehr ähnlichen Problem. Ich bin im D2007 und hantiere mit UTF8Strings, die speicher ich dann irgendwann in ein TextFile (evtl. hier schon der Fehler?). Alles sieht im Editor nett aus, ein third-party-tool meckert auch erstmal nicht über das Format. Sobald Umlaute ins Spiel kommen, ist aber der Ofen aus. Das Tool jammert über "Ungueltiges Byte 2 von 3-Byte-UTF-8-Sequenz." und im NotePad++ (der übrigens annimmt, das wäre "UTF8 ohne BOM", stehen statt Umlauten Sonderzeichen...

Kurz gesagt: Hülfe?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 11:01
Du Schreibst das UTF-8-BOM in die Datei und hinten drann deinen als UTF-8 kodierten Text.

Ab D2009 sollte man besser den UTF8String oder den RawByteString verwenden, anstatt dem AnsiString.

Du mußt aber aufpassen, denn die alten Pascal-Prozeduren ala WriteLn arbeiten ausschließlich mit ANSI (auch in den neueren Unicode-Delphis) ... UTF8 kann zwar als ANSI behandelt werden, aber man sollte aufpassen, daß es nicht irgendwo zu einer automatischen Konvertierung kommt, bei einer Zuweisung von UTF8 an ANSI.


Ab D2009 hätte ich eine TStringList vorgeschlagen, welcher man das Encoding mitgeben kann.

Falls alles nichts hilft, schreib den UTF8String, inkl. BOM, in einen FileStream.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#7

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 11:05
OK, das hatte ich befürchtet. TextFile und WriteLn geht nicht mit UTF8. Dann schau ich, daß ich das in einen hübschen Stream packe.

Danke, Himitsu.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 11:18
Es geht schon mit UTF8.

Man muß eben nur etwas aufpassen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#9

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 11:53
Klar geht es, das hab ich ja gesehen, nur bei Umlauten wirds halt kriminell. Und da kann ich nicht wirklich aufpassen, bzw. das einzige wäre Umlaute umzuwandeln in ihr zweibuchstabiges Pendant. Oder was meinst Du?

Mit dem Stream stosse ich übrigens auf andere Geschichten. Ich gebe zu, ich habe bisher Texte nur als TextFiles gespeichert und TFileStream nie verwendet.

Mein Versuch:
Delphi-Quellcode:
var ExportText : UTF8String;
    myfStream : TFileStream;
.
.
.
      fExpFileName := fDateiPfad + GUIDohneKlammern + '.xml';
      myfStream := TFileStream.Create(fExpFileName, fmCreate);

      ExportText := #239 + #187 + #191 + ExportText; // Ist das ausreichend als BOM?

      myfStream.Write(ExportText,Length(ExportText));
Führt zu einer unleserlichen Datei. Muss ich mit dem BOM noch was anderes anstellen? Ist das die Falsche Art den BOM einzufügen?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Textdatei utf8-kodiert speichern!

  Alt 10. Apr 2012, 12:10
Delphi-Quellcode:
// besser als explizite Unicodeangabe, also 4-stellig, damit keine Codepage in die Quere kommen kann
ExportText := #$00EF#$00BB#$00BF + ExportText;

// oder gleich das korrekte Zeichen (das #$FEFF ist der Unicodemarker ... all diese Text-BOMs sind dieses Zeichen, nur eben entsprechend kodiert)
ExportText := UTF8Encode(#$FEFF) + ExportText;

z.B. #$0085 ist nicht #$85 ... das hatte mich mal veräppeln wollen
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:20 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