Je viens de tomber sur another question dans lequel quelqu'un a suggéré d'utiliser new ASCIIEncoding().GetBytes(someString)
pour convertir d'une chaîne en octets. Pour moi, il était évident que cela ne devrait pas fonctionner pour les caractères non-ASCII. Mais comme il s'avère, ASCIIEncoding remplace heureusement les caractères invalides avec '?'. Je suis très confus à ce sujet parce que ce genre de casse la règle de la moindre surprise. En Python, ce serait u"some unicode string".encode("ascii")
et la conversion est stricte par défaut de sorte que les caractères non-ASCII conduiraient à une exception dans cet exemple.Chaîne stricte à l'encodage d'octets en C#
Deux questions:
- Comment les chaînes strictement converties en un autre encodage (comme ASCII ou Windows 1252), de sorte qu'une exception est levée si des caractères non valides se produisent? En passant, je ne veux pas une boucle foreach convertissant chaque nombre Unicode en octet, puis en vérifiant le huitième bit. Ceci est supposé être fait par un grand framework comme .NET (ou Python ^^).
- Des idées sur la logique de ce comportement par défaut? Pour moi, il est plus logique de faire des conversions strictes par défaut ou au moins de définir un paramètre à cet effet (Python autorise "replace", "ignore", "strict").
Bonne explication. J'avais vu la phrase "Vous pourriez envisager d'avoir votre application définir EncoderFallback ou DecoderFallback à EncoderExceptionFallback ou DecoderExceptionFallback pour empêcher les séquences avec le 8ème ensemble de bits." dans la documentation mais il n'était pas évident pour moi qu'il puisse être utilisé pour des conversions strictes. – AndiDog