文件读取外来字符

时间:2016-05-09 21:05:51

标签: c# file encoding char byte

我正在尝试从.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' });
            }
        }
    }

我正在使用Encoding.ASCII,但显然GetPrivateProfileString不是。来自它的字节可能需要编码。我怎么能这样做?

编辑:示例

这将打印:Tavar?而不是Tavaré

2 个答案:

答案 0 :(得分:1)

要阅读包含法语重音的文本,通常需要使用以下编码之一:

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

编辑:这些适用于OP:

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

答案 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));