[Gelöst] Memo zeigt String mit Sonderzeichen nicht an
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
[Gelöst] Memo zeigt String mit Sonderzeichen nicht an
Hi,
ich bin auf ein seltsames Problem gestoßen:
Eine per GZip kompremierte Datei habe ich dekompremiert und wollte sie mir in einem Memofeld anzeigen lassen (zu debugzwecken).
Das Memo blieb jedoch leer.
Dann habe ich den Inhalt des dekompremierten Streams in eine Datei gespeichert(siehe Anhang) und versucht den Inhalt der Datei ins Memo zu laden. Selbes Ergebnis.
Wenn ich die Datei aber mit einem Editor(Windows-notepad/Notepad++/Sublime Text) sehe ich den Inhalt der Datei. Bisher war ich davon ausgegangen mit dem Memo quasi das Windows Notepad in "Händen"(dem Cursor) zu halten.
(Per Konsolenausgabe(Writeln) gehts auch)
Weiß irgendwer woran das liegt?
MFG
Komoluna
P.S.: Falls sich wer über den Inhalt der Datei wundert: Das ist die level.dat aus einer Minecraft Spielwelt.
ich bin auf ein seltsames Problem gestoßen:
Eine per GZip kompremierte Datei habe ich dekompremiert und wollte sie mir in einem Memofeld anzeigen lassen (zu debugzwecken).
Das Memo blieb jedoch leer.
Dann habe ich den Inhalt des dekompremierten Streams in eine Datei gespeichert(siehe Anhang) und versucht den Inhalt der Datei ins Memo zu laden. Selbes Ergebnis.
Wenn ich die Datei aber mit einem Editor(Windows-notepad/Notepad++/Sublime Text) sehe ich den Inhalt der Datei. Bisher war ich davon ausgegangen mit dem Memo quasi das Windows Notepad in "Händen"(dem Cursor) zu halten.
(Per Konsolenausgabe(Writeln) gehts auch)
Weiß irgendwer woran das liegt?
MFG
Komoluna
P.S.: Falls sich wer über den Inhalt der Datei wundert: Das ist die level.dat aus einer Minecraft Spielwelt.
- Dateianhänge
-
out.txt
- (2.13 KiB) 72-mal heruntergeladen
Zuletzt geändert von Komoluna am So 13. Sep 2015, 15:42, insgesamt 1-mal geändert.
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Memo zeigt String mit Sonderzeichen nicht an
Es handelt sich dabei um gar keine Textdatei.
Strings sind, obwohl sie ein Längenbyte besitzen, Null-terminiert: Bsp.:
Wenn gleich am Anfang in der Datei ein Byte mit einer Null steht (wie bei dir), ist es nur logisch, dass kein Inhalt angezeigt wird.
Wenn es dir nur zur optischen Betrachtung geht kannst du sowas (oder ähnliches) machen:
Strings sind, obwohl sie ein Längenbyte besitzen, Null-terminiert: Bsp.:
Code: Alles auswählen
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Text := 'Hallo '#0'Hallo';
end;
Wenn es dir nur zur optischen Betrachtung geht kannst du sowas (oder ähnliches) machen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
MS: TMemoryStream;
i: Integer;
b: Byte;
begin
FS := TFileStream.Create('out.txt', fmOpenRead);
MS := TMemoryStream.Create;
try
FS.Position := 0;
for i := 0 to FS.Size - 1 do begin
b := FS.ReadByte;
if b = 0 then
MS.WriteByte(32)
else
MS.WriteByte(b);
end;
MS.Position := 0;
Memo1.Lines.LoadFromStream(MS);
finally
MS.Free;
FS.Free;
end;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Memo zeigt String mit Sonderzeichen nicht an
Das ist einfach keine saubere Textdatei.
Ich habe sie unter KDE mit KWrite geöffnet.
Die Meldung von KWrite:
EDIT: Michl war schneller.
Ich habe sie unter KDE mit KWrite geöffnet.
Die Meldung von KWrite:
Code: Alles auswählen
Die Datei out.txt wurde als UTF-8 kodiert geöffnet, enthält aber ungültige Zeichen.
Der Zugriff ist auf Nur-Lesen gesetzt worden, da ein Speichern den Inhalt der Datei zerstören könnte.
Öffnen Sie die Datei erneut mit der korrekten Kodierung oder deaktivieren Sie den Nur-Lesen-Modus über das Menü.
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Memo zeigt String mit Sonderzeichen nicht an
Ok, das wusste ich noch garnicht.
Dann ist also der Windows Editor unsauber programmiert oder wie?
MFG
Komoluna
Dann ist also der Windows Editor unsauber programmiert oder wie?
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Memo zeigt String mit Sonderzeichen nicht an
Ob man das so sagen kann, könnte man diskutieren.Komoluna hat geschrieben: Dann ist also der Windows Editor unsauber programmiert oder wie?
Mir gefällt die deutliche Warnung von KWrite jedenfalls besser.
Re: Memo zeigt String mit Sonderzeichen nicht an
Man kann das für UTF-8 übrigens auch überprüfen lassen:
Code: Alles auswählen
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('/home/theo/out.txt');
if FindInvalidUTF8Character(PChar(sl.Text), Length(sl.Text)) = -1 then
Memo1.Text := sl.Text
else
MessageDlg('Kein UTF-8 String', mtWarning, [mbCancel], 0);
sl.Free;
end;