AGB  ·  Datenschutz  ·  Impressum  







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

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.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#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
44.184 Beiträge
 
Delphi 12 Athens
 
#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.
$2B or not $2B
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#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.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?

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.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?
  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.944 Beiträge
 
Delphi 12 Athens
 
#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
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz