# CCSID

Ein CCSID, ausgeschrieben als coded character set identifier (zu Deutsch: kodierter Zeichensatz-Identifikator), ist eine 16-Bit-Zahl, die angibt, wie Zeichen in einem bestimmten Zeichensatz dargestellt werden. Ein bekanntes Beispiel ist Unicode: Unicode ist eine Sammlung von Zeichen, die auf verschiedene Arten kodiert werden können, etwa durch die Formate UTF-8, UTF-16 oder UTF-32. Diese Kodierungen können zusätzlich mit einer CCSID-Nummer versehen werden, um eindeutig zu kennzeichnen, welche Kodierung verwendet wird – dies ist jedoch nicht immer erforderlich.

## Unterschied zwischen einer Codepage und einer CCSID

Die Begriffe Codepage und CCSID werden oft gleichgesetzt, bedeuten jedoch nicht dasselbe. Eine Codepage ist nur ein Teil dessen, was ein CCSID (Coded Character Set Identifier) ausmacht. Die folgende Übersicht zeigt die wichtigsten Begriffe, die IBM nutzt, um dies zu erklären:
* Glyph: Ein Glyph ist das sichtbare Muster, das ein Zeichen darstellt – sei es auf einem Bildschirm oder gedruckt. Es ist sozusagen das „Bild“ eines Zeichens.
* Zeichen: Ein Zeichen ist das Konzept hinter einem Symbol, das von mehreren Glyphen dargestellt werden kann. Zum Beispiel gibt es für das Zeichen „F“ viele Varianten (fett, kursiv, unterstrichen, in verschiedenen Farben oder Schriftarten). All diese Varianten teilen jedoch die gleiche Grundbedeutung als „F“.
* Zeichensatz: Ein Zeichensatz enthält die Gesamtheit der Zeichen, die für die Kommunikation zwischen Mensch und Computer notwendig sind. Er legt nicht fest, wie diese Zeichen technisch im Computer dargestellt werden. Zum Beispiel unterscheidet ein Zeichensatz zwischen lateinischen, arabischen oder chinesischen Zeichen. In Unicode wird das als „Zeichenrepertoire“ bezeichnet.
* Codepage: Eine Codepage definiert, wie jedem Zeichen in einem Zeichensatz ein bestimmter Zahlenwert (Codepunkt) zugeordnet wird. Dieser Zahlenwert ist die technische Darstellung des Zeichens im Computer. Viele Zeichen können in verschiedenen Codepages unterschiedliche Codepunkte haben. Einfache Zeichensätze kommen mit einbyteigen Codepages aus (maximal 256 Zeichen), während komplexere Zeichensätze wie Unicode oder JIS X 0208 größere Codepages erfordern.
* Kodierungsschema: Ein Kodierungsschema legt fest, wie Codepunkte in Byte-Sequenzen umgesetzt werden. Zum Beispiel unterscheiden sich die Kodierungen UTF-8 und UTF-16 darin, wie viele Bytes sie für ein Zeichen benötigen und wie die Byte-Daten angeordnet sind. Kodierungsschemata wie UTF-8 oder ISO-2022 sind Teil der Unicode-Welt, während IBM zusätzlich Begriffe wie ESID (Encoding Scheme Identifier) verwendet.
* CCSID: Ein CCSID enthält alle Informationen, die erforderlich sind, um Zeichen korrekt zu interpretieren und zu verarbeiten. Dazu gehört mindestens eine Codepage, oft jedoch auch mehrere. Außerdem enthält der CCSID ein Kodierungsschema, das die Handhabung von Zeichen definiert. Der CCSID ermöglicht zusätzliche Funktionen wie die Unterstützung bidirektionaler Texte (z. B. bei arabischen oder hebräischen Zeichen) und erkennt spezielle Formen eines Zeichens.

## Beispiel

CCSID 932:
| Zeichensatz | Codepage | CCSID | Kodierungsschema |
| 01122 | 00897 | 897 | SBCS |
| 00370 | 00301 | 301 | DBCS |
CCSID 942:
| Zeichensatz | Codepage | CCSID | Kodierungsschema |
| 01172 | 01041 | 1041 | SBCS |
| 00370 | 00301 | 301 | DBCS |
CCSID 5028:
| Zeichensatz | Codepage | CCSID | Kodierungsschema |
| 01170 | 00897 | 4993 | SBCS |
| 00370 | 00301 | 301 | DBCS |
Alle drei dieser Varianten von Shift-JIS CCSIDs sind mehrbyteige Zeichensätze (MBCS): Der Teil des einbyteigen Zeichensatzes (SBCS) ist in jedem CCSID unterschiedlich. Der Teil des doppelbyteigen Zeichensatzes (DBCS) ist in jedem CCSID gleich. CCSID 5028 verwendet eine aktualisierte Codepage 897, die CCSID 4993 genannt wird. CCSID 932 verwendet die ursprüngliche Codepage 897, die CCSID 897 ist. CCSID 942 verwendet einen anderen SBCS als die anderen beiden CCSIDs, nämlich 1041.
Man beachte auch, wie CCSID 5028 und 4993 um 4096 (1000 in hexadezimal) vom Vorgänger-CCSID mit demselben Codepage-Identifier abweichen. Dies ist eine übliche Methode, mit der CDRA eine aktualisierte CCSID kennzeichnet.
Es gibt einige Gründe für diese Komplexität:
* Viele der CCSIDs werden in IBM-Datenbanken wie IBM Db2 verwendet, wo ein Datenbankfeld nur einen SBCS-, DBCS- oder MBCS-String unterstützt. CCSIDs ermöglichen es Programmen, zwischen diesen zu unterscheiden.
* Wenn Zeichen hinzugefügt oder ersetzt werden, wie z. B. bei der Einführung des Euro-Währungssymbols, kann man erkennen, ob die gespeicherten Strings diese Zeichenänderungen unterstützen oder nicht, da eine andere CCSID verwendet wird. Diese Versionierung ist wichtig für die Integrität der Daten.
* Es ermöglicht die Wiederverwendung von Ressourcen unter ähnlichen CCSIDs.