Cum se încarcă în memorie textul dintr-un fișier în unicode

Cum se încarcă textul Memo dintr-un fișier în Unicode

Stimați profesioniști, cum pot încărca textul Unicode dintr-un fișier în Memo?
Am facut acest lucru:

var s, s1: șir;
# xA0; # xA0; f: TextFile;






începe
# xA0; AssignFile (f, NumeFile);
# xA0; Resetați (f);
# xA0; în timp ce nu face EoF (f)
# xA0; # xA0; începeți
# xA0; # xA0; ReadLn (f, s);
# xA0; # xA0; s1: = WideCharToString (PWideChar (e));
# xA0; # xA0; Memo1.Lines.Add (s1);
# xA0; se încheie;
se încheie;

Ca rezultat, în loc de caractere din text, obțin "?"
Cred că este vorba despre WideCharToString (PWideChar (s)); se pare că aici fac ceva greșit sau deloc! Prompt vă rog!

VCL nu acceptă unicode, utilizați componente terță parte, de exemplu, TNTComponents.

Delphi acceptă Unicode, nu utilizați TextFile

La mine, principala problemă la afișarea textului și la primirea datelor din acest text. De exemplu, dacă luați un fișier ini, numai în Unicode și procesați-l manual.
Mi sa părut că ar trebui să o procesez mai întâi prin codarea în ANSI.

Și ceea ce este simplu prin fișierul?

Puteți pur și simplu prin intermediul fișierului, dar am sfătui TFileStream și înregistrarea direct în WideString cu o lungime predeterminată, atunci S: = WS







Nu este foarte clar cu al doilea parametru (lungime) în ReadBuffer. Dacă vreau să citesc întregul fișier deodată, specificați dimensiunea?


> nu este prea mult clar cu al doilea parametru (lungime) în ReadBuffer.
> # xA0; Dacă vreau să citesc întregul fișier simultan, specificați dimensiunea?

Tamponul este în octeți, deci da.

atunci când citește, produce o eroare.


var # xA0; st: TFileStream;
# xA0; # xA0; ws: PWideChar;
# xA0; # xA0; s: String;
începe
# xA0; st: = TFileStream.Create (NumeFile, fmOpenRead);
# xA0; st.ReadBuffer (ws, st.Size); // aici apare o eroare
# xA0; s: = WideCharToString (ws);
se încheie;

> # xA0; st.ReadBuffer (ws, st.Size); // aici apare o eroare

Trist, fetelor, trist.
Dar, de fapt, cel mai recent, AS a fost menționat. Pușkin.

Și ceea ce nah PWideChar.

atunci ce dacă PWideChar?

> Atunci ce se întâmplă dacă PWideChar?

[5]

Este insultătoare pentru marele poet.

Știi cum să citești? WideString și setați dimensiunea

încă produce o eroare!

Oricum, unde și cu ce cod.
Și asta este ceea ce spune eroarea?

Și cine va da o amintire, Pușkin?

Ei bine. Voi învăța. dacă nu, o să mă întorc!

P.S. Informații pentru examinare.
Există două erori în [8]. Unul deja exprimat de mai multe ori. Al doilea este legat de primul parametru al procedurii ReadBuffer.

Ei bine, prima greșeală este clară. neatent! iar al doilea, după cum sa spus, alocarea memoriei. Am facut acest lucru:


var # xA0; st: TFileStream;
# xA0; # xA0; # xA0; ws: WideString;
# xA0; # xA0; # xA0; s: String;
începe
# xA0; st: = TFileStream.Create (NumeFile, fmOpenRead);
# xA0; SetLength (ws, st.Size);
# xA0; st.ReadBuffer (PWideChar (ws) ^, st.Size);
# xA0; s: = ws;
# xA0; Memo1.Lines.Add (e);
se încheie;

în principiu, numai la sfârșitul semnelor de întrebare apar.







Articole similare

Trimiteți-le prietenilor: