using System; using System.Text; namespace SharpCompress.Common { public class ArchiveEncoding { /// /// Default encoding to use when archive format doesn't specify one. /// public Encoding Default { get; set; } /// /// ArchiveEncoding used by encryption schemes which don't comply with RFC 2898. /// public Encoding Password { get; set; } /// /// Set this encoding when you want to force it for all encoding operations. /// public Encoding Forced { get; set; } /// /// Set this when you want to use a custom method for all decoding operations. /// /// string Func(bytes, index, length) public Func CustomDecoder { get; set; } public ArchiveEncoding() { Default = Encoding.UTF8; Password = Encoding.UTF8; } public string Decode(byte[] bytes) { return Decode(bytes, 0, bytes.Length); } public string Decode(byte[] bytes, int start, int length) { return GetDecoder().Invoke(bytes, start, length); } public byte[] Encode(string str) { return GetEncoding().GetBytes(str); } public Encoding GetEncoding() { return Forced ?? Default ?? Encoding.UTF8; } public Func GetDecoder() { return CustomDecoder ?? ((bytes, index, count) => (Default ?? Encoding.UTF8).GetString(bytes, index, count)); } } }