PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Ces caractères sont-ils valides pour XML ?

tl;dr Non, ils ne sont pas valides, quel que soit l'encodage effectué, il y a soit un bogue, soit des informations d'encodage erronées sur l'entrée.

55357 et 56842 sont respectivement 0xD83D et 0xDE0A en hexadécimal.

En Unicode, ils se trouvent respectivement dans des plages appelées "High Surrogate" et "Low Surrogate".

Cela signifie qu'ils ne sont pas points de code Unicode appropriés, mais plutôt utilisés dans UTF-16 pour construire une seule valeur Unicode qui ne rentre pas dans 16 bits (c'est-à-dire le plan multilingue de base).

Ces deux valeurs spécifiques se décodent en U+1F60A SMILING FACE WITH SMILING EYES . L'entité HTML décimale correcte pour cela serait 😊 .

La raison la plus probable à cela est qu'une transformation qui ne connaît pas UTF-16 ou pensait ce texte n'est pas UTF-16 a fait l'encodage (mais aurait dû détecter que ces valeurs sont invalides et signaler une erreur même dans ce cas).