none
Schriftarten in Ini-Datei nicht abspeicherbar ? RRS feed

  • Frage

  • Hallo,

    ich schreibe in eine Ini-Datei Namen in andere Sprachen der Welt und die jeweilige Tastaur ist auch installiert.

    Statt den Namen in der jeweiligen Sprache, schreibt er "??????", obwohl die Ini-Datei eine UnicodeDatei ist.

    Warum ist dies so und was kann ich da machen, damit er in der jeweiligen Weltsprache in die Ini-Datei schreibt und liest ?

    mfg


    • Bearbeitet ati.sah Donnerstag, 6. Juli 2017 07:44
    Donnerstag, 6. Juli 2017 07:44

Antworten

  • Es müsste so aussehen:

    [DllImport("KERNEL32.DLL", EntryPoint="WritePrivateProfileStringW",
       SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true,
       CallingConvention=CallingConvention.StdCall)]
       private static extern int WritePrivateProfileString(
          string lpAppName,
          string lpKeyName,
          string lpString,
          string lpFilename);
    [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringW",
       SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true,
       CallingConvention=CallingConvention.StdCall)]
       private static extern int GetPrivateProfileString(
          string lpAppName,
          string lpKeyName,
          string lpDefault,
          string lpReturnString,
          int nSize,
          string lpFilename);



    - Gruß Florian

    • Als Antwort markiert ati.sah Donnerstag, 6. Juli 2017 13:05
    Donnerstag, 6. Juli 2017 12:15

Alle Antworten

  • Hi,

    ohne zu wissen, was Du da wie mit welchem Code abspeicherst und wo Du die ?????? dann siehst, kann man dir auch nicht sagen, was Du falsch machst.

    Ich persönlich würde allerdings keine Ini Datei verwenden, sondern eher Xml oder Json. Dafür gibt es dann auch entsprechende Serialisierungs- und Deserialisierungsmethoden, mit denen man auf sehr einfachem Weg die Daten laden und speichern kann.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 6. Juli 2017 07:53
    Moderator
  • Hallo ati.sah.

    Du musst die Unicode Varianten der API Aufrufe (GetPrivateProfileStringW und WritePrivateProfileStringW) verwenden.

    - Gruß Florian



    • Bearbeitet Florian Haupt Donnerstag, 6. Juli 2017 10:55 Korrektur
    Donnerstag, 6. Juli 2017 10:09
  • Hallo, so ähnlich

    [DllImport("kernel32")] private static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

    MyIniDateiCls MyIni = new MyIniDateiCls(test.ini)

    MyIni.Write("test", "Country", "WeltsprachenTxt");

    ist überhaupt in eine IntDatei möglich ?

    mfg



    • Bearbeitet ati.sah Donnerstag, 6. Juli 2017 10:40
    Donnerstag, 6. Juli 2017 10:37
  • Hallo, so ähnlich

    [DllImport("kernel32")] private static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

    MyIniDateiCls MyIni = new MyIniDateiCls(test.ini)

    MyIni.Write("test", "Country", "WeltsprachenTxt");

    ist überhaupt in eine IntDatei möglich ?

    mfg



    Das ist nicht die Unicode Funktion der API! Du musst WritePrivateProfileStringW verwenden, wie ich vorhin schon schrieb.

    - Gruß Florian


    Donnerstag, 6. Juli 2017 10:55
  • Hallo Florian, vielen dank.

    es tritt irgend ein Fehler, wo er dann den Default Wert nimmt WritePrivateProfileStringW();.

    bei dem alten WritePrivateProfileString(); klappt ohne Probleme => leider ohne Unicode

    mfg



    • Bearbeitet ati.sah Donnerstag, 6. Juli 2017 11:22
    Donnerstag, 6. Juli 2017 11:07
  • Es müsste so aussehen:

    [DllImport("KERNEL32.DLL", EntryPoint="WritePrivateProfileStringW",
       SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true,
       CallingConvention=CallingConvention.StdCall)]
       private static extern int WritePrivateProfileString(
          string lpAppName,
          string lpKeyName,
          string lpString,
          string lpFilename);
    [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringW",
       SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true,
       CallingConvention=CallingConvention.StdCall)]
       private static extern int GetPrivateProfileString(
          string lpAppName,
          string lpKeyName,
          string lpDefault,
          string lpReturnString,
          int nSize,
          string lpFilename);



    - Gruß Florian

    • Als Antwort markiert ati.sah Donnerstag, 6. Juli 2017 13:05
    Donnerstag, 6. Juli 2017 12:15
  • Hi,

    "es tritt irgend ein Fehler auf" ist nichts, mit dem wir auch nur irgendwas anfangen könnten.

    Bei Fehler bitte immer die exakte und vollständige Fehlermeldung, keine verkürzte oder eigeninterpretierte Version davon, posten.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 6. Juli 2017 13:02
    Moderator