AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WritePrivateProfileW und Unicode INI-Files
Thema durchsuchen
Ansicht
Themen-Optionen

WritePrivateProfileW und Unicode INI-Files

Ein Thema von martinf16 · begonnen am 13. Nov 2009 · letzter Beitrag vom 31. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 04:52
Ich versuche einen Unicode-String in ein INI-File zu schreiben. Die Unit TIniFiles hab ich entsprechend auf WideStrings umgestellt, jedoch bereitet eine Stelle Probleme:

WritePrivateProfile Ich habe diese Funktion mit WritePrivateProfileW ausgetauscht, um WideStrings schreiben zu können, trotzdem tauchen aber die Fragezeichen auf, es wird als ANSI gespeichert.

In diversen C++ Foren hab ich dann gelesen, dass diese Funktion ein ANSI File erstellt und nur in ein vorhandens INI-File Unicode schreibt. Also hab ich um es auszutesten eine UTF8 Datei erstellt und mit WritePrivateProfileW in diese Datei gespeichert - wieder nur Fragezeichen, also wieder nur ANSI geschrieben.

Jetzt komm ich nicht mehr weiter.... Wisst ihr was los ist?!?!

PS: Ich habe schon getesten ob der WideString nicht auf dem Weg zur Funktion verlorengeht, das kann nicht der Fehler sein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#2

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 06:47
Hier im Forum suchenunicode ini

Kurz gesagt:
Wurde die INI-Datei mit einer Ansi-Funktion erstellt, dann ist und bleibt sie ANSI.
Und mit'm Unicode isses andersrum.

Nicht alles glauben, was die C++-ler einen einreden wollen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 07:21
Zitat von himitsu:
Nicht alles glauben, was die C++-ler einen einreden wollen.
Lies mal den letzten Satz unter Parameters: WritePrivateProfileString

Nur was einem dort keiner sagt, ist, dass die Datei UTF16 sein muss, damit das klappt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#4

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 07:35
Du meinst?
Zitat:
If the file was created using Unicode characters, the function writes Unicode characters to the file. Otherwise, the function writes ANSI characters.
Und das für Windows Unicode = UTF-16 ist, daß ist ja wohl selbstverständlich
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 07:39
Zitat von himitsu:
Und das für Windows Unicode = UTF-16, daß ist ja wohl selbstverständlich
Nicht unbedingt. Aber ich vermute das die WriteXXX-Methoden nicht erkennen das es einen UTF8-BOM gibt und diesen überlesen (Als "komische" Daten im File ansehen). Erst bei UTF-16 müssen die Lese/Schreibroutinen auf Widechars umgestellt werden da sonst die (vermutlich C/C++)-Implementierung sonst die Strings nicht auslesen könnte. Bei UTF8 kann man auch mit Ansichars lesen/schreiben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 07:59
Zitat von himitsu:
Und das für Windows Unicode = UTF-16 ist, daß ist ja wohl selbstverständlich
Scheinbar nicht
Zitat von martinf16:
Also hab ich um es auszutesten eine UTF8 Datei erstellt und mit WritePrivateProfileW in diese Datei gespeichert - wieder nur Fragezeichen, also wieder nur ANSI geschrieben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#7

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 08:20
Wenn ich das richtig mitbekomman hab, dann wird nur das Unicode-BOM (UTF-16) erkannt und alles andere ist Ansi, wobei das BOM dann als Text angesehn wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 14:01
Gut, danke schon mal. Das könnte die Ursache sein.. UTF8 wird nicht als Unicode erkannt, UTF16 ist gefordert.

Die bisher verwendete Signatur für UTF8 von mir war EF BB BF, wie ist diese aber bei dem unterstützen vom Windows unterstützten UTF16? FE FF für Big Endian oder FF FE für Little Endian habe ich im Netz gefunden.. Ist das egal welche man nimmt?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 14:07
Zitat von martinf16:
FE FF für Big Endian oder FF FE für Little Endian habe ich im Netz gefunden.. Ist das egal welche man nimmt?
Probiers doch aus. Normalerweise ist es egal, außer hier wurde auch noch geschlampt und nur eine implementiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: WritePrivateProfileW und Unicode INI-Files

  Alt 13. Nov 2009, 15:01
Ich habs mit beiden Signaturen ausprobiert und jetzt ist zu viel des guten passiert: Die ganze Datei (geöffnet im TextEditor) besteht nur noch aus chinesischen Zeichen und kann dementsprechend auch nicht mehr eingelesen werden...

Hab dann mal versucht manuell in die Datei zu schreiben (unterer Teil), aber auch das produziert die chinesischen Zeichen... Wie kann das denn passieren?!

Hier mein Code:

Delphi-Quellcode:
var
  f: file;
  ftxt: TextFile;
  fsig: array [0..2] of byte;
begin
  fsig[0]:=$FF;
  fsig[1]:=$FE;
  try
    AssignFile(f, 'text.txt');
    ReWrite(f, 1);
    BlockWrite(f, fsig, sizeof(fsig));
  finally
    CloseFile(f);
  end;

  //zu Testzwecken hier das manuelle Schreiben
  try
    AssignFile(ftxt, 'text.txt');
    Append(ftxt);
    Writeln('blabla');
  finally
    CloseFIle(ftxt);
  end;
end;
  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 18:35 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