2016-05-09 19 views
7

Sto cercando di leggere caratteri stranieri da un file .ini. Questo è il metodo che sto usandoFile in lettura caratteri stranieri

[DllImport("kernel32")] 
public static extern int GetPrivateProfileString(string Section, 
               int Key, 
               string Value, 
               [MarshalAs(UnmanagedType.LPArray)] byte[] Result, 
               int Size, 
               string FileName); 

public static string[] GetEntryNames(string section, string iniPath) 
    { 
     for (int maxsize = 500; true; maxsize *= 2) 
     { 
      byte[] bytes = new byte[maxsize]; 
      int size = Imports.GetPrivateProfileString(section, 0, "", bytes, maxsize, iniPath); 
      if (size < maxsize - 2) 
      { 
       string entries = Encoding.ASCII.GetString(bytes, 0, 
              size - (size > 0 ? 1 : 0)); 
       Console.WriteLine("Entries: " + entries.Split(new char[] { '\0' })[3]); 
       return entries.Split(new char[] { '\0' }); 
      } 
     } 
    } 

Sto usando ma a quanto pare non è GetPrivateProfileString. I byte che escono da esso hanno bisogno di una codifica probabilmente. Come lo posso fare?

Edit: Esempio

Questo stamperà: Tavar? invece di Tavaré

+0

Sei sicuro che non sta leggendo correttamente, invece di essere solo 'Console.WriteLine'? – LegionMammal978

+0

@ LegionMammal978 Sì. Impostalo su un'etichetta e ottieni lo stesso risultato –

+1

@JohnP. Prova a usare 'Encoding.UTF8' o' Encoding.GetEncoding ("iso-8859-1") 'per il carattere francese – Xiaoy312

risposta

1

per leggere il testo che contiene gli accenti francesi, di solito si vuole utilizzare una delle seguenti codifiche:

  • Encoding.UTF8
  • Encoding.GetEncoding("iso-8859-1")
  • Encoding.GetEncoding("windows-1252")

Edit: Questi lavoravano per OP:

  • Encoding.UTF7
  • Encoding.GetEncoding("iso-8859-1")
-1

Disclaimer: io ho praticamente alcuna C# esperienza

Si può utilizzare Unicode, in modo da provare questo:

Encoding.Unicode.GetString(bytes, 0, size - (size > 0 ? 1 : 0)); 

E questo:

Encoding.UTF8.GetString(bytes, 0, size - (size > 0 ? 1 : 0)); 

E questo too:

Encoding.UTF32.GetString(bytes, 0, size - (size > 0 ? 1 : 0)); 
+0

Non c'è 'Encoding.UTF16', ma [' Encoding.Unicode'] (https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode (v = vs.110). aspx): ottiene una codifica per il formato UTF-16 utilizzando l'ordine byte little endian. – Xiaoy312

+0

@ Xiaoy312 Ho provato tutti questi suggerimenti prima di postare. Non è nessuno di loro. –

+0

@JohnP. 'Encoding.GetEncoding (" iso-8859-1 ")' non ha funzionato? – Xiaoy312

Problemi correlati