using System.Text; namespace Developpez.Dotnet.Text { /// /// Fournit des méthodes d'extension pour travailler avec les encodages de texte /// public static class EncodingExtensions { /// /// Tente de décoder une chaine de caractères à partir d'un tableau d'octets pour un encodage donné. /// /// Encodage à utiliser pour le décodage /// Tableau d'octets contenant les données à décoder /// Chaine décodée /// True si le décodage réussit, false si bytes contient des donnés non valides public static bool TryGetString(this Encoding encoding, byte[] bytes, out string result) { return encoding.TryGetString(bytes, 0, bytes.Length, out result); } /// /// Tente de décoder une chaine de caractères à partir d'un tableau d'octets pour un encodage donné. /// /// Encodage à utiliser pour le décodage /// Tableau d'octets contenant les données à décoder /// Chaine décodée /// Position à partir de laquelle on lit les données /// Nombre d'octets à lire /// True si le décodage réussit, false si bytes contient des donnés non valides public static bool TryGetString(this Encoding encoding, byte[] bytes, int index, int count, out string result) { result = null; try { var decoder = encoding.GetDecoder(); decoder.Fallback = DecoderFallback.ExceptionFallback; int charCount = decoder.GetCharCount(bytes, index, count); char[] chars = new char[charCount]; decoder.GetChars(bytes, index, count, chars, 0); result = new string(chars); return true; } catch(DecoderFallbackException) { return false; } } /// /// Vérifie si un tableau d'octets contient des données valides pour un encodage donné. /// /// Encodage pour lequel la validité des données est vérifiée /// Tableau d'octets contenant les données à vérifier /// True si les données sont valides, sinon false. public static bool IsValid(this Encoding encoding, byte[] bytes) { return encoding.IsValid(bytes, 0, bytes.Length); } /// /// Vérifie si un tableau d'octets contient des données valides pour un encodage donné. /// /// Encodage pour lequel la validité des données est vérifiée /// Tableau d'octets contenant les données à vérifier /// Position à partir de laquelle on vérifie les données /// Nombre d'octets à vérifier /// True si les données sont valides, sinon false. public static bool IsValid(this Encoding encoding, byte[] bytes, int index, int count) { try { var decoder = encoding.GetDecoder(); decoder.Fallback = DecoderFallback.ExceptionFallback; decoder.GetCharCount(bytes, index, count); return true; } catch (DecoderFallbackException) { return false; } } } }