private void DecompressDialog_Loading(FrameworkElement sender, object args) { try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); foreach (EncodingInfo Enco in Encoding.GetEncodings()) { if (Enco.CodePage == Encoding.Default.CodePage) { AvailableEncoding.Insert(0, Enco.GetEncoding()); } else { AvailableEncoding.Add(Enco.GetEncoding()); } } AvailableEncoding.Add(Encoding.GetEncoding(936)); EncodingOption.SelectedIndex = 0; } catch (Exception ex) { LogTracer.Log(ex); } }
/// <summary> /// Get a null terminated String /// </summary> /// <param name="Pointer">Pointer to the string</param> /// <param name="Decode">if False, return the hex of the string</param> /// <returns></returns> internal static string GetStringA(IntPtr Pointer, bool Decode = true, int?CP = null, int?Len = null) { int len = 0; if (Len == null) { while (Marshal.ReadByte(Pointer, len) != 0) { ++len; } } else { len = Len.Value; } byte[] buffer = new byte[len]; Marshal.Copy(Pointer, buffer, 0, buffer.Length); if ((LogInput || LogAll) && !DumpStrOnly) { Log("Input: {0}", true, ParseBytes(buffer)); } if (Unicode && CP == null) { return(Encoding.Default.GetString(buffer)); } else { if (CP != null) { Encoding Enco; switch (CP) { case 0: case 3: case 2: case 1: Enco = Encoding.Default; break; default: Enco = (from x in Encoding.GetEncodings() where x.CodePage == CP select x.GetEncoding()).FirstOrDefault() ?? WriteEncoding; break; } return(Enco.GetString(buffer)); } else if (Decode) { return(ReadEncoding.GetString(buffer)); } else { return(ParseBytes(buffer)); } } }