In meiner INI Klasse lese ich mit folgendem Code eine ganze Sektion aus. Die INI ist mit UTF8/BOM gespeichert. Nun will ich in diese Daten in der GUI visualisieren, bekomme aber in allen Fällen mit Sonderzeichen falsche Zeichen in Controls zurückgegeben. So richtig weiß ich mir grad keinen Rat.
public string[] ReadSectionRAW(string strSectionName)
{
IntPtr pBuffer = Marshal.AllocHGlobal(1048576);
string[] strArray = new string[0];
UInt32 uiNumCharCopied = 0;
uiNumCharCopied = GetPrivateProfileSection(strSectionName, pBuffer, 1048576, FFILE);
int iStartAddress = pBuffer.ToInt32();
int iEndAddress = iStartAddress + (int)uiNumCharCopied;
while (iStartAddress < iEndAddress)
{
int iArrayCurrentSize = strArray.Length;
Array.Resize<string>(ref strArray, iArrayCurrentSize + 1);
string strCurrent = Marshal.PtrToStringAnsi(new IntPtr(iStartAddress));
if (fileEncoding == Encoding.UTF8)
{
Encoding enc = new UTF8Encoding(true);
byte[] utf8bytes = enc.GetBytes(strCurrent);
byte[] win1252Bytes = Encoding.Convert(enc, Encoding.ASCII, utf8bytes);
strCurrent = Encoding.ASCII.GetString(win1252Bytes);
}
strArray[iArrayCurrentSize] = strCurrent;
iStartAddress += (strCurrent.Length + 1);
}
Marshal.FreeHGlobal(pBuffer);
pBuffer = IntPtr.Zero;
return strArray;
}
string strCurrent = Marshal.PtrToStringAnsi(new IntPtr(iStartAddress));
if (fileEncoding == Encoding.UTF8)
{
Encoding enc = new UTF8Encoding(true);
byte[] utf8bytes = enc.GetBytes(strCurrent);
byte[] win1252Bytes = Encoding.Convert(enc, Encoding.ASCII, utf8bytes);
strCurrent = Encoding.ASCII.GetString(win1252Bytes);
}
Was genau ist der Sinn hinter diesem Code?
Du hast UTF16, holst per UTF8-BOM die Bytes, konvertierst sie in ASCII und holst von den ASCII-Bytes den dann ASCII-String?
Das klingt ziemlich unsinnig 😉
Und was der Code drum herum soll, ist mir auch nicht ganz klar
By the way:
Zum Lesen von INI gibt's Frameworks.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
NuGet ini Packages ini
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code