Le caractère U + 001A apparaît fréquemment dans les messages d'erreur relatifs au codage des caractères. Qu'est-ce que le caractère U + 001A?
U + 001A est défini dans la norme Unicode comme un caractère de contrôle avec le nom SUBSTITUT, et il appartient à un groupe caractérisé comme suit, dans chapitre 16 de la norme: "Il y a 65 points de code mis de côté dans la norme Unicode pour la compatibilité avec les codes de contrôle C0 et C1 définis dans le cadre ISO/CEI 2022 [...] La norme Unicode prévoit l'échange intact de ces points de code, sans ajouter ni soustraire à leur sémantique. La sémantique des codes de contrôle est généralement déterminée par l'application avec laquelle ils sont utilisés. Cependant, en l'absence d'utilisations spécifiques d'application, elles peuvent être interprétées selon la sémantique de la fonction de commande spécifiée dans l'ISO/CEI 6429: 1992. "
ISO 6429 est en fait équivalent à ECMA 48 , qui mentionne également ce code comme ayant le nom abrégé SUB, et le définit comme suit: "SUB est utilisé à la place d'un caractère qui a été trouvé être invalide ou erroné. SUB est destiné à être introduit par des moyens automatiques. "Cela reflète la définition de ce code de contrôle en Ascii .
Ainsi, en général, U + 001A peut être utilisé pour indiquer une erreur de données au niveau des caractères, telle que la présence d'octets, dans des données de caractères supposées, qui n'ont aucune interprétation dans le codage de caractères appliqué. En gros, cela signifierait donc des "données de mauvais caractère", mais plus adéquatement des "données malformées, lorsque l'on essaie d'interpréter les données comme des caractères". Cependant, dans Unicode, U + FFFD REMPLACEMENT CHARACTER est plus approprié, car il a une sémantique Unicode spécifique.
Puisque la question a été étiquetée avec "xml", il convient de noter que dans XML 1.0, U + 001A est interdit, par la clause 2.2 caractères . Notez que le commentaire "tout caractère Unicode, à l'exclusion des blocs de substitution, FFFE et FFFF" est trompeur (mais les commentaires ne sont pas normatifs); U + 001A est un caractère Unicode, mais ce n'est pas un caractère graphique et son effet n'est pas défini dans la norme Unicode.
C'est le code de contrôle Ctrl + Z. C'est un peu spécial dans Windows, qui l'a hérité de DOS qui l'a hérité de CP/M. Son utilisation héritée était comme marqueur de fin de texte, similaire à la façon dont Ctrl + D est utilisé dans Unix.
Le voir dans un message d'erreur ou utilisé comme caractère de secours pour une conversion de codage échouée est cependant assez inhabituel. Je revérifierais le code et m'assurer que ce n'est pas U + 003F ou U + FFFD, les caractères de remplacement de codage les plus typiques. Ou tout simplement une bizarrerie du code spécifique que vous traitez.
Autant que je sache + 001A est un personnage hérité en Unicode. Sa seule raison d'existence est qu'il était déjà défini dans ASCII comme caractère de remplacement ("... utilisé à la place d'un caractère reconnu invalide ou erroné ou qui ne peut pas être représenté sur un appareil donné. "). Il était également parfois utilisé pour mettre fin à un flux de caractères (ce qui est probablement une source courante de problèmes)
En Unicode, cette fonction est reprise par le + FFFD REMPLACEMENT CHARACTER .