Ich benutze Delphi 7, Wie kann ich ein Memo als Unicode-Textdatei speichern, finde ich ein Beispiel für das Speichern als UTF-8-Textdatei, aber ich brauche ein Beispiel zum Speichern der Datei als Unicode. Danke für jede HilfeSo speichern Sie ein Memo als Unicode
Antwort
Sie müssen ein Steuerelement verwenden, das Unicode unterstützt. Delphi 7 TMemo
nicht. Das bedeutet, dass dein wirkliches Problem nicht so sehr darin besteht, den Inhalt zu retten, sondern den Inhalt überhaupt erst zuzulassen.
Sie sollten damit umgehen, indem Sie zu den TNT Unicode-Komponenten wechseln. Sobald Sie die TNT Unicode components verwenden, unterstützt das TNT Unicode-Memo das Speichern der Inhalte als Unicode.
UTF-8
ist Unicode. Es ist nur ein Byte-Kodierungsschema für Unicode-Daten. Wenn Sie wirklich meinen, dass Sie die Datei als UTF-16
anstelle von UTF-8
speichern müssen, ist das eine andere Frage.
Die beste Option besteht darin, ein Unicode-basiertes Memo-Steuerelement zu verwenden, damit es die Unicode-Daten für Sie verarbeiten kann. Sie sollten wirklich auf eine moderne Unicode-basierte Delphi-Version (Delphi 2009 oder höher) upgraden und Unicode-Konvertierungen für Sie durchführen lassen. Wenn Sie bei einer alten ANSI-basierten Delphi-Version (Delphi 2007 oder früher) bleiben, sollten Sie, wie von David vorgeschlagen, Unicode-UI-Steuerelemente von Drittanbietern verwenden.
Wenn Sie jedoch mit dem nativen VCL ANSI-basierten Memo bleiben, können Sie immer noch erreichen, was Sie verlangen, Sie müssen die Konvertierung nur manuell in Ihrem Code verwalten. Sie können die TMemo
ANSI-basierten Daten in UTF-16 konvertieren, indem Sie den Zeichenfolientyp WideString
verwenden (der intern MultiByteToWideChar()
verwendet, um ANSI-Daten in UTF-16 zu konvertieren) und dann die UTF-16-Daten in eine Datei schreiben.
Zum Beispiel:
var
BOM: WideChar;
FS: TFileStream;
WS: WideString;
I: Integer;
begin
FS := TFileStream.Create('MyUnicodeFile.txt', fmCreate);
try
BOM := $FEFF;
FS.WriteBuffer(BOM, SizeOf(BOM));
For I := 0 to Memo1.Lines.Count-1 do
begin
WS := WideString(Memo1.Lines[I] + sLineBreak);
FS.WriteBuffer(PWideChar(WS)^, Length(LS) * SizeOf(WideChar));
end;
finally
FS.Free;
end;
end;
- 1. So speichern Sie ein Python-Wörterbuch als Umgebungsvariable
- 2. Android: So speichern Sie ein Vorschaubild als JPEG-Bild?
- 3. So speichern Sie einen Objektnamen als Zeichenfolge
- 4. So speichern Sie Excel-Datei als CSV?
- 5. Speichern Sie ein Canvas-Objekt als JSON
- 6. So speichern Sie ein Objekt in Mongodb
- 7. So speichern Sie ein Canvas über Büroklammer
- 8. So speichern Sie ein ausgefülltes Dokument?
- 9. So speichern Sie ein halbfertiges Formular
- 10. Speichern Sie ein Google-Diagramm als SVG?
- 11. So ersetzen Sie Unicode-Zeichen durch ASCII
- 12. So arbeiten Sie mit Unicode in Python
- 13. So speichern Sie TypeInfo
- 14. So erhalten Sie 'Globus' Unicode-Zeichen
- 15. So speichern Sie Diagramm aus Excel als Bild/PDF?
- 16. VBA/Excel So speichern Sie ActiveCell als Objekt
- 17. So verwenden Sie ein Bitmap als Benachrichtigungssymbol
- 18. So speichern Sie Portlet-Positionen
- 19. So speichern Sie HSSF-Zeilen als String Java POI
- 20. So konvertieren Sie UTF8 in Unicode
- 21. So speichern Sie Liste als Wert in Redis
- 22. So speichern Sie aktuelle ASPX-Seite als HTML
- 23. So speichern Sie JavaScript-Array als Redis-Liste
- 24. So speichern Sie eine gerenderte Ansicht als statische Datei?
- 25. So speichern Sie eine "CroppedBitmap"
- 26. Memo Argumente unabhängig voneinander
- 27. So speichern Sie ein WPF-Bild in eine Datei
- 28. Speichern Sie 'Benutzername' als Dateiname
- 29. So speichern Sie virtuelle Währung?
- 30. So speichern Sie ein JSON-Objekt in der SQLite-Datenbank