Gibt es irgendeine (mehr oder weniger) universelle Möglichkeit, eine Textdatei in D zu lesen?
Die Anforderung besteht darin, dass die Funktion die Codierung automatisch erkennt und mir die gesamten Daten der Datei in einem konsistenten Format gibt, z. B. in string
oder in dstring
. Es sollte Stücklisten automatisch erkennen und sie entsprechend interpretieren.
Ich habe std.file.readText()
ausprobiert, aber verschiedene Codierungen werden nicht gut behandelt.
(Natürlich wird dies eine Fehlerrate ungleich null haben, und das ist für meine Anwendung akzeptabel.)
Ich glaube, dass die einzigen echten Optionen für Datei-I / O in Phobos an dieser Stelle (abgesehen vom Aufruf von C-Funktionen) std.file.readText
und std.stdio.File
sind. readText
liest eine Datei als ein Array von Zeichen, wchars oder dchars (standardmäßig unveränderlich (char) [] - d. h. Zeichenfolge). Ich glaube, dass die Codierung UTF-8, UTF-16 und UTF-32 für Zeichen, wchars bzw. dchars sein muss, obwohl ich im Quellcode sicher gehen müsste. Alle Kodierungen, die mit diesen Kodierungen kompatibel sind (z. B. ASCII ist kompatibel mit UTF-8) sollten gut funktionieren.
Wenn Sie File
verwenden, haben Sie mehrere Optionen für Funktionen zum Lesen der Datei mit - einschließlich readln
und rawRead
. Sie lesen die Datei jedoch im Wesentlichen mit einer UTF-8-, UTF-16- oder UTF-32-kompatiblen Kodierung, genau wie mit readText
, oder Sie lesen sie als Binärdaten ein und manipulieren sie selbst.
Da die Zeichentypen in D char, wchar und dchar sind, die UTF-8-, UTF-16- bzw. UTF-32-Codeeinheiten sind, ist die Datei, außer Sie möchten die Daten im Binärformat lesen muss in einer Codierung kodiert werden, die mit einer dieser drei Arten von Unicode kompatibel ist. Wenn Sie eine Zeichenfolge in einer bestimmten Kodierung angeben, können Sie sie mithilfe der Funktionen in std.utf
in eine andere Kodierung konvertieren. Mir ist jedoch keine Möglichkeit bekannt, eine Datei nach ihrem Codierungstyp abzufragen, außer dass readText
verwendet wird, um die Datei in einer bestimmten Codierung zu lesen und zu prüfen, ob sie erfolgreich ist.
Also, es sei denn, Sie möchten eine Datei selbst bearbeiten und im Handumdrehen bestimmen, in welcher Kodierung sie sich befindet. Am besten ist es wahrscheinlich, readText
mit jedem nachfolgenden String-Typ zu verwenden, wobei der erste erfolgreich ist. Da Textdateien normalerweise in UTF-8 oder einer UTF-8-kompatiblen Kodierung sind, würde ich erwarten, dass readText
, das mit einer normalen Zeichenkette verwendet wird, fast immer gut funktioniert.