La conversion des données Unicode vers une page de codes particulière utilise ce que l'on appelle la stratégie de "meilleur ajustement" (comme indiqué dans la réponse de @ Paul et dans le lien que @Martin a noté dans un commentaire sur la question). Selon cette page MSDN pour le codage de caractères dans le .NET Framework :
Le mappage le mieux adapté est le comportement par défaut d'un objet Encoding qui code les données Unicode en données de page de code ...
Mais que sont exactement ces mappages? Cette page MSDN utilisé pour communiquer ce qui suit:
Les stratégies les plus adaptées varient selon les différentes pages de code et ne sont pas documentées en détail.
Cependant, ce n'était pas tout à fait exact. Peut-être que les "stratégies" pour déterminer les mappages ne sont pas exactement documentées. D'accord. Mais, les mappages eux - mêmes sont documentés, mais pas dans les endroits les plus faciles à trouver.
Donc, grâce à Microsoft qui a déplacé la documentation vers GitHub, cette page indique maintenant ce qui suit (parce que je l'ai mise à jour 😸):
Les stratégies les plus adaptées ne sont pas documentées en détail. Cependant, plusieurs pages de codes sont documentées sur le site Web du Consortium Unicode . Veuillez consulter le fichier readme.txt dans ce dossier pour une description de la façon d'interpréter les fichiers de mappage.
Si vous accédez à l'URL suivante, vous verrez une liste de plusieurs fichiers, chacun nommé pour la page de codes à laquelle il mappe les caractères Unicode:
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/
La plupart des fichiers ont été mis à jour pour la dernière fois (ou du moins y ont été placés) le 2006-10-04, et l'un d'eux a été mis à jour le 2012-03-14. La première partie de ces fichiers mappe les codes ASCII dans un point de code Unicode équivalent. Mais la deuxième partie de chaque fichier mappe les caractères Unicode dans leurs "équivalents" ASCII.
J'ai écrit un script de test qui utilise les mappages de la page de code 1252 pour vérifier si SQL Server utilise vraiment ces mappages. Cela peut être déterminé en répondant à ces deux questions:
- Pour tous les points de code mappés, SQL Server les convertit-il en mappages spécifiés?
- Pour tous les points de code non mappés, SQL Server convertit-il certains d'entre eux en caractères non "
?
"?
Le script de test est trop long pour être placé ici, donc je l'ai posté sur Pastebin à:
Mappages Unicode vers la page de codes dans SQL Server
L'exécution du script montrera que la réponse à la première question ci-dessus est "Oui" (ce qui signifie que tous les mappages fournis sont respectés). Cela montrera également que la réponse à la deuxième question est "Non" (ce qui signifie qu'aucun des points de code non mappés ne se transforme en autre chose que le caractère "inconnu"). Par conséquent, ce fichier de mappage est très précis :-).