AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Probleme beim einlesen einer Textdatei (TEncoding)
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim einlesen einer Textdatei (TEncoding)

Ein Thema von JYPDWhite · begonnen am 13. Sep 2013 · letzter Beitrag vom 13. Sep 2013
Antwort Antwort
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#1

Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 16:38
Delphi-Version: XE2
Hi ihr,

eine Software an der ich arbeite ließt eine Datei (im Endefekt sind es viele Dateien, der Fehler ist aber bei allen der selbe) ein.
Solange das Programm auf einem PC mit deutschen Regionseinstellungen ausgeführt wird ist alles ok.
Sobald aber in Systemsteuerung --> "Regions- und Sprachoptionen" unter "Erweitert" die "Sprache für Programme die Unicode nicht unterstützen" von "Deutsch (Deutschland)" auf "Chinesisch (Hongkong S.A.R.)" gestellt wird sowie die "Codepagekonvertierungstabellen" 10000 bis 10004 angehakt sind funktioniert das einlesen nicht mehr korrekt.

Ich habe hier eine Testdatei wo nur ein "ö" drinn ist. Was unter einem "normalen" Windows auch korrekt ausgelsen wird. Wenn ich das ohne jegliches Encoding auf dem China Rechner die Datei einlese bekomme ich ein Fragezeichen raus. Mit Ascii encoding wird mir ein kleines "v" ausgegeben. Nun ist die Frage was ist das richtige Encoding?

Im Testprogramm verwende ich TStringlist zum Datei einlesen. Aber eigentlich suche ich eine Lösung die auch bei bei ReadLn (AssignFile) funktioniert. Da ich mir so die Arbeit sparen könnte das ganze Programm umzukrempeln.


Testquellcode:
Delphi-Quellcode:
procedure TForm13.Btn1Click(Sender: TObject);
var
  liste : TStringList;
  arr : TArray<string>;
begin
  liste:=TStringList.Create();
// liste.Encoding:=TEncoding.ASCII;
//ASCII kommt kein chinesisch dafuer aber v anstelle von oe

  liste.LoadFromFile('test2.txt', TEncoding.ASCII);
  arr:= liste.ToStringArray();
  ShowMessage((liste[0]));
end;
Hat jemand eine Idee?
Miniaturansicht angehängter Grafiken
regions-und-spracheinstellungen.jpg   ohne-encoding.jpg   mit-ascii-encoding.jpg  
Angehängte Dateien
Dateityp: txt test2.txt (10 Bytes, 5x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 16:43
Das Ö kommt wohl in der Hongkong-Codepage nicht vor.
Markus Kinzler
  Mit Zitat antworten Zitat
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#3

AW: Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 17:02
Hi,

ja das habsch mir auch gedacht. Die Frage ist nur wie bekomme ich das eingelesen. Nicht ohne Grund kann man ja eigentlich beim einlesen angeben in welcher Codierung die Daten vorliegen oder habe ich da einen Denkfehler?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 17:04
Die Datei besitzt aber eine deutsche Codierung. Du müsstest also auch die deutsche Codepage nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#5

AW: Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 17:06
Wenn du kein Encoding angibst, wird TEncoding.Default verwendet. Dieses wiederum entspricht unter Windows TEncoding.ANSI, was allerdings die aktuell eingestellte CodePage von Windows verwendet.

Wenn du sicher bist, daß die Datei mit Deutschem Encoding geschrieben wurde, dann kannst du dir ein passendes Encoding erzeugen und das verwenden.

myEncoding := TMBCSEncoding.Create(1252);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#6

AW: Probleme beim einlesen einer Textdatei (TEncoding)

  Alt 13. Sep 2013, 17:42
Wenn du kein Encoding angibst, wird TEncoding.Default verwendet. Dieses wiederum entspricht unter Windows TEncoding.ANSI, was allerdings die aktuell eingestellte CodePage von Windows verwendet.

Wenn du sicher bist, daß die Datei mit Deutschem Encoding geschrieben wurde, dann kannst du dir ein passendes Encoding erzeugen und das verwenden.

myEncoding := TMBCSEncoding.Create(1252);
Hallo Uwe,

genau dass war der Hinweis den ich irgendwie nirgendwo gefunden habe. Danke dir. Das Testprogramm funktioniert nun. Morgen bau ich das dann mal in die Software ein und teste dann noch mal. Dadurch dürfte ich sogar darum drum rum kommen alles umzubauen. Sondern muss nur an den entsprechenden Stellen bei AssignFile das Encoding mit angeben

MfG
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 01:42 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