![]() |
Wie Textdateien lesen? Unicode oder ANSI
Hallo,
ich habe bisher mit AssignFile und ReadLn Textdateien gelesen. Damit kann man leider keine Unicode-Dateien lesen. Nach etwas suchen habe ich das hier gefunden:
Delphi-Quellcode:
Das Problem dabei ist, dass dieser Code nur UTF8-Unicode-Dateien lesen kann. Bei normalen ASNI-Dateien wird nichts eingelesen.
var
Reader: TStreamReader; begin Reader := TStreamReader.Create('C:\Test.txt'); //Reader := TStreamReader.Create('C:\Test.txt', TEncoding.GetEncoding(28591), false); //Alternative, damit auch deutsche Umlaute dargestellt werden while not Reader.EndOfStream do Memo1.Lines.Add(Reader.ReadLine); Reader.Free; end; Welche Möglichkeiten gibt es eine Textdatei unabhängig davon ob es UTF8 oder ANSI usw. ist einzulesen? Das Format soll also automatisch erkannt werden. Ich habe sehr große Dateien. Das einlesen muss also Zeilenweise passieren und nicht einfach über eine TStringList, die mit LoadFromFile die gewünschte Automatik bietet. |
AW: Wie Textdateien lesen? Unicode oder ANSI
Moin,
geht das nicht mit der ![]() Das einzige was möglich ist, nach einer ![]() [edit]Ich habe mal bei der Reference geschaut, und dort steht zu der ![]() Zitat:
MfG Fabian |
AW: Wie Textdateien lesen? Unicode oder ANSI
für UTF vorher prüfen ob die ersten drei Byte ef bb bf enthalten?
|
AW: Wie Textdateien lesen? Unicode oder ANSI
Zitat:
Zitat:
|
AW: Wie Textdateien lesen? Unicode oder ANSI
Zitat:
|
AW: Wie Textdateien lesen? Unicode oder ANSI
Schau dir dafür doch mal TEncoding.GetPreamble an :wink:
Nachtrag: Oder gleich TEncoding.GetBufferEncoding ... |
AW: Wie Textdateien lesen? Unicode oder ANSI
Moin,
okay das mit den TStringList hatte ich nicht gelesen, aber dennoch habe ich die Lösung "aus Versehen" zitiert. Und zwar guck doch einfach mal wie das TStrings macht. Dann machst du das genauso. MfG Fabian |
AW: Wie Textdateien lesen? Unicode oder ANSI
Hi,
@BlueStarHH: Mit Deinem Delphi2010, solltest Du aber auch mit TFileStream und TStringStream + Encoding arbeiten können. Greetz Data |
AW: Wie Textdateien lesen? Unicode oder ANSI
Wenn es wirklich (fast) nur Zeilenweise sein soll:
![]() ![]() ![]() TStringStream, TStringList/TStrings usw. lesen alle die Datei komplett in den Arbeitsspeicher. Sie können alles dekodieren, welches über TEncoding verfügbar gemacht ist/wird ... also alles. Standardmäßig kann TEncoding mit Unicode (UTF-16), BigEndian-Unicode, UTF-8, UTF7, Ansi und ASCII umgehn. (wobei ASCII beim Auslesen als Ansi erkannt wird, da es ebenfalls keinen eigenen BOM besitzt) |
AW: Wie Textdateien lesen? Unicode oder ANSI
Zitat:
Einziger "Trick" ist, dass man eine neu gelesene Zeile nicht in einen
Delphi-Quellcode:
, sondern in einen
string
Delphi-Quellcode:
einliest, damit Delphi nichts von sich aus umzuwandeln versucht.
RawByteString
Damit könntest du dann auch problemlos testen, ob du beim Einlesen in der ersten Zeile zu Beginn einen BOM stehen hast und diesen auswerten. Mit der passenden Konvertierungsfunktion kannst du dann ja jede Zeile einzeln in einen sauberen Unicode-String wandeln. Bis denn Bommel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11: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 by Thomas Breitkreuz