Verwalten der Datenkonvertierung zwischen einem Unicode-Server und einem Nicht-Unicode-Client
Dieses Thema beschreibt, wie die Integrität von Zeichendaten gewahrt werden kann, wenn die serverseitige Datenspeicherung in Unicode erfolgt, die clientseitige Anwendung, die mit den Daten interagiert, jedoch eine bestimmte Codepage verwendet.
Dateneingabe
Wenn Nicht-Unicode-Daten vom Client zum Speichern auf dem Server in Unicode gesendet werden, können Daten von beliebigen Clients mit beliebigen Codepages ordnungsgemäß gespeichert werden, falls eine der folgenden Bedingungen zutrifft:
Zeichenfolgen werden an den Server als Parameter eines Remoteprozeduraufrufs (Remote Procedure Call, RPC) gesendet.
Zeichenfolgekonstanten wird der Großbuchstabe N vorangestellt. Dies ist unabhängig davon erforderlich, ob die clientseitige Anwendung Unicode-kompatibel ist. Ohne das Präfix N konvertiert SQL Server die Zeichenfolge in die Codepage, die der Standardsortierung der Datenbank entspricht. Alle Zeichen, die in der betreffenden Codepage nicht gefunden werden, gehen verloren.
Datenabruf
Wenn die Clientanwendung nicht Unicode-kompatibel ist und die Daten in Nicht-Unicode-Puffer abruft, kann ein Client nur die Daten abrufen und ändern, die durch die Codepage des Clientcomputers dargestellt werden können. Dies bedeutet, dass ASCII-Zeichen immer abgerufen werden können, da die Darstellung von ASCII-Zeichen in allen Codeseiten gleich ist; Nicht-ASCII-Daten hängen von der Codepage-in-Codepage-Konvertierung ab.
Angenommen, Sie verwenden eine Anwendung, die zurzeit nur in den USA ausgeführt wird, nun aber in Japan bereitgestellt wird. Da die SQL Server-Datenbank Unicode-kompatibel ist, kann der englische und der japanische Text in den gleichen Tabellen gespeichert werden, obwohl die Anwendung noch nicht für die Verarbeitung von Text als Unicode geändert wurde. Wenn die Anwendung mit den beiden zuvor genannten Optionen kompatibel ist, können japanische Benutzer die Nicht-Unicode-Anwendung für das Eingeben und Abrufen japanischer Daten verwenden, und amerikanische Benutzer können englische Daten eingeben und abrufen. Alle Daten aus beiden Benutzergruppen bleiben erhalten und werden in der gleichen Spalte der Datenbank gespeichert und als Unicode dargestellt. Unter diesen Umständen kann eine Unicode-kompatible Berichtsanwendung bereitgestellt werden, die Berichte generiert, die das gesamte Dataset berücksichtigen. Englischsprachige Benutzer können die japanischen Zeilen jedoch nicht anzeigen, weil die Anwendung keine Zeichen anzeigen kann, die in deren Codepage (1252) nicht vorhanden sind.
Dieser Umstand kann hingenommen werden, wenn die beiden Benutzergruppen nicht die Datensätze der jeweils anderen Gruppe anzeigen müssen. Wenn ein Benutzer der Anwendung Datensätze mit Text anzeigen und ändern können muss, der nicht durch eine einzige Codepage dargestellt werden kann, besteht die einzige Alternative im Ändern der Anwendung, damit diese Unicode verwenden kann.
Webbasierte Anwendungen
Wenn das clientseitige Programm webbasiert ist oder eine Verbindung mit einer ASP-Seite (Active Server Pages) herstellt, sind Metadatenspezifikationen für die clientseitige HTML-Seite und die serverseitige ASP-Seite vorhanden. Diese Spezifikationen müssen für die Angabe vorgenommen werden, wie Zeichenfolgen zwischen dem Server, dem ASP-Modul und dem Clientbrowser konvertiert werden sollen.
Auf der clientseitigen HTML-Seite muss das META-Attribut angeben, dass die Daten des Zeichensatzes in das Codierungsschema des Clients konvertiert werden, indem ein CHARSET-Code angegeben wird. Die folgende HTML-Seite weist z. B. den Client an, Zeichendaten in die Codepage 950 (Traditionelles Chinesisch) zu konvertieren, indem big5 als CHARSET-Code angegeben wird. Wenn Sie die Zeichensatzcodes für das META-Attribut anzeigen möchten, besuchen Sie diese Microsoft-Website.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=big5">
<!--
-->
</HEAD>
<BODY>
<!--
body
-->
</BODY>
</HTML>
Auf der serverseitigen ASP-Seite müssen Sie die ASP-Webanwendung informieren, welche Codepage der Clientbrowser verwendet. Sie können die Session.CodePage-Eigenschaft oder die @CodePage-Direktive angeben. Diese Methoden verarbeiten die Konvertierung von Daten vom Server zum Client sowie GET- und POST-Clientanforderungen. In den folgenden Beispielen werden beide Methoden zum Angeben der Konvertierung in die und aus der Codepage des Clients (950 (Traditionelles Chinesisch)) verwendet.
<%@ Language=VBScript codepage=950 %>
<% Session.CodePage=950 %>
Außerdem müssen Sie daran denken, allen Zeichenfolgeliteralen den Buchstaben N als Präfix voranzustellen.