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;
}
}
}
}