我正在尝试从.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é
答案 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));