AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Ansi Encoding ohne Leerzeichen

Ansi Encoding ohne Leerzeichen

Ein Thema von QuickAndDirty · begonnen am 4. Aug 2017 · letzter Beitrag vom 7. Aug 2017
Antwort Antwort
Seite 1 von 2  1 2   
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Ansi Encoding ohne Leerzeichen

  Alt 4. Aug 2017, 16:59
Hallo
Ich schicke aus einer Delphi APP ein Logfile an Einen Windows Rechner.
Diese Logfile soll in Notepad.exe dargestellt werden.

Delphi-Quellcode:
function TLog.Internal_GetEmailFile: String;
var alogtext:String;
begin
  result := '';
  Internal_ReadFile(alogtext);
  if tFile.Exists(fEmailFile) then
    Tfile.Delete(fEmailFile);
  TFile.WriteAllText(femailfile,UTF8Encode(aLogText), TEncoding.UTF8 );
  result := femailfile;
end;
Wie muss ich das Encoding beim Speichern einstellen damit nicht vor jedem Zeichen ein Leerzeichen steht?
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
914 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Ansi Encoding ohne Leerzeichen

  Alt 4. Aug 2017, 17:06
TEncoding.ANSI

(Das war einfach )
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Ansi Encoding ohne Leerzeichen

  Alt 4. Aug 2017, 17:22
PS: Das ist kein Leerzeichen, es ist eine 0.

Die 0 vom HighByte des Unicode, wenn da das Char maximal als #255 ist.



Aber wenn die 0 auch bei deinem TEncoding.UTF8 vorhanden war, dann stimmt bei dir noch was Anderes nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Ansi Encoding ohne Leerzeichen

  Alt 4. Aug 2017, 17:28
Es war bei Tencoding.Ansi
und bei Tencoding.UTF8 vorhanden
WriteAllText Schreibt im UTF 8 fall sogar (laut source) eine BOM davor.

Es ist total seltsam
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
6.402 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#5

AW: Ansi Encoding ohne Leerzeichen

  Alt 4. Aug 2017, 18:10
Das Utf8Encode ist doch völlig überflüssig (wenn nicht sogar schädlich!), denn WriteAllText erwartet dort einen string und übernimmt selbst das Encoding.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Ansi Encoding ohne Leerzeichen

  Alt 7. Aug 2017, 12:17
Ich habe es jetzt umgestellt auf folgendes Verfahren...

Delphi-Quellcode:
function TLog.Internal_GetEmailFile: String;
var alogtext:String;
   AnsiArr:Tbytes;
   UniCodeArr:tBytes;
begin
  result := '';
  Internal_ReadFile(alogtext);
  if tFile.Exists(fEmailFile) then
    Tfile.Delete(fEmailFile);
  unicodeArr := Tencoding.Unicode.GetBytes(aLogtext);
  AnsiArr := TEncoding.Convert(Tencoding.Unicode,Tencoding.ANSI, unicodeArr );
  Tfile.WriteAllBytes(femailfile,AnsiArr);

// TFile.WriteAllText(femailfile,aLogText, TEncoding.ANSI );

  result := femailfile;
end;
....Notepad.exe gibt mir das mit chinesischen Zeichen wieder

Welches ist die native codierung von Strings und Dateien in Delphi Tokyo für Android apps?

Das ist ein Copy&Paste aus dem Ctrl+F7 aud aLogtext
Code:
'4.08.17 17:59:52 EnteredBackground'#012#000'4.08.17 17:59:53 WillBecomeInactive'#012#000'4.08.17 17:59:55 WillBecomeForeground'#012#000'4.08.17 17:59:55 BecameActive'#012#000'4.08.17 17:59:58 WillBecomeInactive'#012#000'4.08.17 18:00:00 EnteredBackground'#012#000'4.08.17 18:00:00 BecameActive'#012#000'4.08.17 18:00:00 WillBecomeInactive'#012#000'4.08.17 18:00:04 WillBecomeForeground'#012#000'4.08.17 18:00:04 BecameActive'#012#000'4.08.17 18:00:09 EnteredBackground'#012#000'4.08.17 18:00:09 WillBecomeInactive'#012#000'4.08.17 18:00:14 WillBecomeForeground'#012#000'4.08.17 18:00:14 BecameActive'#012#000'4.08.17 18:00:48 EnteredBackground'#012#000'4.08.17 18:00:54 WillBecomeInactive'#012#000'4.08.17 18:01:46 Log active'#012#000'4.08.17 18:01:46 App Start'#012#000'4.08.17 18:01:49 FinishedLaunching'#012#000'4.08.17 18:03:42 Log active'#012#000'4.08.17 18:03:42 App Start'#012#000'4.08.17 18:03:53 FinishedLaunching'#012#000'4.08.17 18:06:05 WillBecomeForeground'#012#000'4.08.17 18:06:05 BecameActive'#012#000'4.08.17 18:06:16 EnteredBackground'#012#000'4.08.17 18:06:17 WillBecomeInactive'#012#000'4.08.17 18:06:21 WillBecomeForeground'#012#000'4.08.17 18:06:21 BecameActive'#012#000'4.08.17 18:06:55 EnteredBackground'#012#000'4.08.17 18:07:02 WillBecomeInactive'#012#000'4.08.17 18:07:33 WillBecomeForeground'#012#000'4.08.17 18:07:33 BecameActive'#012#000'4.08.17 18:11:01 EnteredBackground'#012#000'4.08.17 18:11:01 WillBecomeInactive'#012#000'7.08.17 12:18:09 Log active'#012#000'7.08.17 12:18:09 App Start'#012#000'7.08.17 12:18:22 FinishedLaunching'#012#000'7.08.17 12:18:29 WillBecomeForeground'#012#000'7.08.17 12:18:30 BecameActive'#012
Also schon beim Lesen der Datei sind überflüssige #000 drin. Nur am ende ist keines drin. Ich weiß nicht wie die dort rein kommen, bzw wenn sie teil des zeilenumbruchs sind, warum am ende dann keine #000 steht.
Andreas
#PerfMatters

Geändert von QuickAndDirty ( 7. Aug 2017 um 12:26 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Ansi Encoding ohne Leerzeichen

  Alt 7. Aug 2017, 13:00
Ok Diese Version funktioniert für Notepad.exe, leider sind dann die Zeilenumbrüche weg.
Sublime Text zeigt dann aber nur eine HExDump an.

Delphi-Quellcode:
function TLog.Internal_GetEmailFile: String;
var alogtext:String;
   AnsiArr:Tbytes;
   UTF8Arr:tBytes;
begin
  result := '';
  Internal_ReadFile(alogtext);
  if tFile.Exists(fEmailFile) then
    Tfile.Delete(fEmailFile);
  UTF8Arr := Tencoding.UTF8.GetBytes(aLogtext);
  AnsiArr := TEncoding.Convert(Tencoding.UTF8,Tencoding.ANSI, UTF8Arr );
  Tfile.WriteAllBytes(femailfile,AnsiArr);

// TFile.WriteAllText(femailfile,aLogText, TEncoding.ANSI );

  result := femailfile;
end;
Zeilenumbrüche mache ich so mit linefeed...
Delphi-Quellcode:
  aText := Datetimetostr(now) + ' ' + aText + linefeed;
  FStream.Write(aText[1], length(aText) * Sizeof(aText[1]) );
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Ansi Encoding ohne Leerzeichen

  Alt 7. Aug 2017, 13:34
OK,Das hier ist die Lösung.
Delphi-Quellcode:
function TLog.Internal_GetEmailFile: String;
var alogtext:String;
begin
  result := '';
  Internal_ReadFile(alogtext);
  alogtext := aLogtext.Replace(''+linefeed, ''+carriageReturn+''+linefeed, [rfReplaceAll] );
  alogtext := alogtext.Replace(''#0,'',[rfReplaceAll]);
  if tFile.Exists(fEmailFile) then
    Tfile.Delete(fEmailFile);
  TFile.WriteAllText(femailfile,aLogText, TEncoding.UTF8 );

  result := femailfile;
end;
Ich weiß nicht wie die ganzen "null" werte da rein kommen, aber es fühlt sich so ein bisschen an als würde der Filestream einen Nulltermnierten string schreiben, und auch die #0 in die Datei speichern.
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Ansi Encoding ohne Leerzeichen

  Alt 7. Aug 2017, 14:07
In 'nem FileStream ist alles drin, bei 'nem #0-terminierten String auch die #0, da sie ein Teil von ihm ist.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.464 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Ansi Encoding ohne Leerzeichen

  Alt 7. Aug 2017, 14:41
In 'nem FileStream ist alles drin, bei 'nem #0-terminierten String auch die #0, da sie ein Teil von ihm ist.
Ist der Datentyp "String" in Firemonkey Anwendungen für Android ein Nullterminierter unicode string?
Andreas
#PerfMatters
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf