![]() |
WritePrivateProfileW und Unicode INI-Files
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:
Delphi-Quellcode:
Ich habe diese Funktion mit WritePrivateProfileW ausgetauscht, um WideStrings schreiben zu können, trotzdem tauchen aber die Fragezeichen auf, es wird als ANSI gespeichert.
WritePrivateProfile
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. |
Re: WritePrivateProfileW und Unicode INI-Files
![]() 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. :angel2: |
Re: WritePrivateProfileW und Unicode INI-Files
Zitat:
![]() Nur was einem dort keiner sagt, ist, ![]() |
Re: WritePrivateProfileW und Unicode INI-Files
Du meinst?
Zitat:
|
Re: WritePrivateProfileW und Unicode INI-Files
Zitat:
|
Re: WritePrivateProfileW und Unicode INI-Files
Zitat:
Zitat:
|
Re: WritePrivateProfileW und Unicode INI-Files
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.
|
Re: WritePrivateProfileW und Unicode INI-Files
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? |
Re: WritePrivateProfileW und Unicode INI-Files
Zitat:
|
Re: WritePrivateProfileW und Unicode INI-Files
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; |
Re: WritePrivateProfileW und Unicode INI-Files
Writeln dürfte in deiner Delphi-Version nix mit Unicode anzufangen wissen.
|
Re: WritePrivateProfileW und Unicode INI-Files
Das WriteLn soll auch gar keien UniCode Strings schreiben. Die Unicode Strings sollen später mit WritePrivateProfileW geschrieben werden.
Das WriteLn war nur ein Test, ob damit auch chinesische Zeichen geschrieben werden und so geschieht es auch. Die Signatur scheint aber korrekt zu sein, zumindest wird die Datei im Editor als Unicode angezeigt und die chinesischen Zeichen sprechen ja auch dafür. Wieso lassen sich aber nun mit WritePrivateProfileW keine lateinischen Buchstaben mehr schreiben?? |
Re: WritePrivateProfileW und Unicode INI-Files
Wenn du eine AnsiIni hast, dann mit Notepad öffnen und als Unicode speichern.
Wenn keine vorhanden ist, dann einfach die Unicode-IniAPI nutzen und eine Unicode-Ini erstellen. |
Re: WritePrivateProfileW und Unicode INI-Files
Die ini sollte vom Programm schon selber erstellt werden, deswegen ja die Idee eine leere Datei mit Unicode-Signatur zu erstellen. Aber woher bekomme ich diese Unicode IniAPI?! Oder wie rufe ich sie auf? Davon habe ich noch nichts gehört..
|
Re: WritePrivateProfileW und Unicode INI-Files
Ich habs! Es geht tatsächlich mit der Signatur FF FE - mein Fehler oben war ein Byte zu viel zu schreiben (die einfachsten Dinge übersieht man ja gerne) - wenn man das korrigiert und anschließend mit WritePrivateProfileW in die Datei schreibt, werden alle Unicode-Zeichen richtig in die Datei geschrieben.
|
AW: WritePrivateProfileW und Unicode INI-Files
auch wenns schon ein Weilchen her ist, ich habs so gemacht...
Delphi-Quellcode:
kubaprocedure CreateIni; var Ini : TMemIniFile; begin Ini := TMemIniFile.Create(ExtractFilePath(ParamStr(0))+'test.ini', TEncoding.Unicode); ///// Russisch ini.WriteString('Language_ru','File1','файл'); ini.UpdateFile; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz