Bei der Konvertierung von Unicode-Daten in eine bestimmte Codepage wird die sogenannte "Best-Fit" -Strategie verwendet (wie in der Antwort von @ Paul und in dem Link angegeben, den @Martin in einem Kommentar zur Frage vermerkt hat). Laut dieser MSDN-Seite für die Zeichenkodierung in .NET Framework :
Die Best-Fit-Zuordnung ist das Standardverhalten für ein Codierungsobjekt, das Unicode-Daten in Codepage-Daten codiert ...
Aber was genau sind diese Zuordnungen? Das MSDN - Seite verwendet die folgende angeben:
Die Best-Fit-Strategien variieren für verschiedene Codepages und sind nicht detailliert dokumentiert.
Das war jedoch nicht ganz richtig. Möglicherweise sind die "Strategien" zur Bestimmung der Zuordnungen nicht genau dokumentiert. OK. Die Zuordnungen selbst sind jedoch dokumentiert, nur nicht an den am einfachsten zu findenden Orten.
Dank Microsoft, das die Dokumentation auf GitHub verschoben hat, wird auf dieser Seite nun Folgendes angezeigt (weil ich sie aktualisiert habe 😸):
Best-Fit-Strategien werden nicht detailliert dokumentiert. Auf der Website des Unicode-Konsortiums sind jedoch mehrere Codepages dokumentiert . In der Datei readme.txt in diesem Ordner finden Sie eine Beschreibung der Interpretation der Zuordnungsdateien.
Wenn Sie zur folgenden URL gehen, wird eine Liste mit mehreren Dateien angezeigt, die jeweils nach der Codepage benannt sind, der Unicode-Zeichen zugeordnet sind:
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/
Die meisten Dateien wurden zuletzt am 04.10.2006 aktualisiert (oder zumindest dort abgelegt), und eine davon wurde am 14.03.2012 aktualisiert. Der erste Teil dieser Dateien ordnet ASCII-Codes einem entsprechenden Unicode-Codepunkt zu. Der zweite Teil jeder Datei ordnet die Unicode-Zeichen jedoch ihren ASCII-Äquivalenten zu.
Ich habe ein Testskript geschrieben, das die Codezuordnungen verwendet, um zu überprüfen, ob SQL Server diese Zuordnungen wirklich verwendet. Dies kann durch Beantwortung dieser beiden Fragen festgestellt werden:
- Konvertiert SQL Server die zugeordneten Codepunkte in die angegebenen Zuordnungen?
- Konvertiert SQL Server für alle nicht zugeordneten Codepunkte einen von ihnen in ein Nicht-
?
Zeichen.
Das Testskript ist zu lang, um es hier zu platzieren. Deshalb habe ich es auf Pastebin veröffentlicht unter:
Zuordnungen von Unicode zu Codepage in SQL Server
Durch Ausführen des Skripts wird angezeigt, dass die Antwort auf die erste Frage oben "Ja" lautet (was bedeutet, dass alle bereitgestellten Zuordnungen eingehalten werden). Es wird auch gezeigt, dass die Antwort auf die zweite Frage "Nein" lautet (was bedeutet, dass keiner der nicht zugeordneten Codepunkte in etwas anderes als das Zeichen für "unbekannt" umgewandelt wird). Daher ist diese Zuordnungsdatei sehr genau :-).