2016-05-09 55 views
7

我想從.ini文件中讀取外部字符。 這是我使用文件讀取外來字符

[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' }); 
      } 
     } 
    } 

的方法,我用但顯然GetPrivateProfileString不是。來自它的字節可能需要編碼。我怎樣才能做到這一點?

編輯:例

這將打印:Tavar?而不是Tavaré

+0

你確定這不是正確讀,而不是僅僅是'Console.WriteLine'? – LegionMammal978

+0

@ LegionMammal978是的。將其設置在標籤上並得到相同的結果 –

+1

@JohnP。嘗試使用'Encoding.UTF8'或'Encoding.GetEncoding(「iso-8859-1」)'法國字符 – Xiaoy312

回答

1

讀取包含法國口音的文本,您通常要使用以下編碼之一:

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

編輯:這些工作了OP:

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

聲明:我幾乎沒有C#經驗

它可以使用Unicode,那麼試試這個:

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

而且這樣的:

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

這太:

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

沒有'Encoding.UTF16',但['Encoding.Unicode'](https://msdn.microsoft.com/en-us/library/system.text.encoding.unicode(v = vs.110)。 aspx):使用小端字節順序獲取UTF-16格式的編碼。 – Xiaoy312

+0

@ Xiaoy312在發佈之前,我嘗試了所有這些建議。這不關他們。 –

+0

@JohnP。 'Encoding.GetEncoding(「iso-8859-1」)'也沒有工作? – Xiaoy312