Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Unicode und ASP (Einführung)

Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Unicode ist ein weltweiter Zeichensatz-Standard, der die gängigsten Buchstaben und Zeichen enthält, die weltweit in der Geschäftswelt Verwendung finden. Mit Hilfe von Systemen, die Unicode verarbeiten können, wird die Erstellung und Verwaltung von Software für verschiedenste Sprachen stark vereinfacht. Anstatt für jede Sprache einen eigenen Zeichensatz einsetzen zu müßen, erlaubt Unicode das Hantieren von mehrsprachigen Texten allein mit dem Unicode Zeichensatz.

Unicode weist jedem Zeichen eine 2 Byte lange Nummer zu (von 0 bis 65535), sodaß das Zeichen in der Computerwelt unabhängig von Plattform, Programm und Sprache verwendet werden kann.

Der Unicode Standard ist die Basis für weitere Standards wie XML, JavaScript oder WML. Die Entwicklung und Verbreitung des Unicode Standards wird vom Unicode-Konsortium betrieben.

Was hat nun Unnicode mit ASP zu tun, und wo wird Unicode heute schon auf breiter Basis in der Software-Entwicklung eingesetzt?

Active Server Pages (ASP) auf IIS 4.0 oder IIS 5.0 arbeitet intern mit Unicode um Zeichen zu speichern und zu verarbeiten. Viele weitere Microsoft Produkte arbeiten bereits vollständig mit Unicode, oder sind zumindest Unicode kompatibel:

Wo kommt nun der ASP-Entwickler mit Unicode in Berührung?

Je nach Einstellung des Webservers benutzt die ASP Engine eine bestimmte "Codepage". Diese Codepage legt fest, wie der Ascii-Code eines Zeichens zu interpretieren ist. Es gibt Codepages für Westeuropäische Sprachen, Griechisch, Kyrillisch, Chinesisch, Japanisch usw.

In jedem ASP Script werden Strings in Variablen gespeichert und zum Browser geschrieben. Jedesmal, wenn ASP ein Zeichen zu interpretieren hat, sei es nun, weil es in einer Variablen gespeichert wird, oder weil es mittels Response.Write zum Browser geschrieben wird, konvertiert ASP das Zeichen von Unicode zur eingestellten Codepage.

Die Codepage kann man unter ASP mittels der @Codepage Direktive oder mittels Session.Codepage einstellen.

Daß ASP intern Unicode zum Speichern von Strings verwendet wurde bereits erwähnt, daneben gibt es aber beim Schreiben von ASP-Seiten auch folgende Berührungspunkte mit Unicode-Einstellungen und -Parametern:

All dies wird in nachfolgenden Artikeln dieser Artikelreihe Unicode und ASP ausführlich und detailliert erklärt werden. Probleme, Bugs und Fallen in der Programmierung werden erläutert und Lösungen zu Aufgabenstellungen präsentiert werden.

Zum Abschluß dieses Artikels möchte ich noch mit einem kleinen Beispiel demonstrieren, daß ASP intern Unicode benutzt, und die gespeicherten Daten mittels Codepage Einstellung interpretiert:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Beispiel</title>
<!-- Griechischer Zeichensatz im Browser benutzen - ISO -->  
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-7">  
</head>

<body>
<%
' Speichern der Original Codepage
Session("OriginalCodePage") = Session.CodePage

' Griechische Codepage einstellen
Session.CodePage = 1253

Response.Write("Codepage = " & Session.Codepage)
Response.Write("<br>")

strA = Chr(&HC1) & _
  Chr(&HD3) & _
  Chr(&HD0)
  
Response.Write(strA & "<br>")

Response.Write("Asc Werte(Ansi): <br>")
For intI = 1 to Len(strA)
  Response.Write(Asc(Mid(strA,intI,1)) & " ")
Next
Response.Write("<br><br>")

Response.Write("AscW Werte (Unicode): <br>")
For intI = 1 to Len(strA)
  Response.Write(AscW(Mid(strA,intI,1)) & " ")
Next
Response.Write("<br><br><br>")

' Westeuropaeische Codepage: 
' Verschiebt Interpretation des Unicodes
Session.CodePage = 1252

Response.Write("Codepage = " & Session.Codepage)
Response.Write("<br>")

Response.Write(strA & "<br>")

Response.Write("Asc Werte(Ansi): <br>")
For intI = 1 to Len(strA)
  Response.Write(Asc(Mid(strA,intI,1)) & " ")
Next
Response.Write("<br><br>")

Response.Write("AscW Werte (Unicode): <br>")
For intI = 1 to Len(strA)
  Response.Write(AscW(Mid(strA,intI,1)) & " ")
Next
Response.Write("<br><br>")

Response.Write("Darstellung mittles HTML-Syntax &amp#xxx; :<br>")
For intI = 1 to Len(strA)
  Response.Write("&#" & AscW(Mid(strA,intI,1)) & ";")
Next

%>

</body>
</html>

<%
' Zuruecksetzen der Codepage Einstellungen
Session.CodePage =  Session("OriginalCodePage")
%>

Die Ausgabe des Scripts im Browser ist im folgenden Screenshot gezeigt:

Nun aber zur Analyse des Sourcecodes. Der META HTTP-EQUIV Code zeigt dem Browser an, den HTML Inhalt mit dem Griechischen Zeichensatz zu interpretieren:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-7">  

Danach wird der Wert (Integer) der augenblicklichen Codepage aus Session.Codepage ausgelesen und in der Sessionvariablen Session("OriginalCodePage") gespeichert.

Die griechische Codepage hat den Wert 1253. Um die griechische Codepage für Ein- und Ausgaben des ASP-Skripts einzustellen, wird Session.Codepage der Wert 1253 zugewiesen.

Im String strA werden die griechischen Zeichen Alpha, Sigma, Pi als Unicode gespeichert. Dies erreicht man durch Verwendung der ChrW Funktion und der entsprechenden Unicodes für die einzelnen Zeichen.

Danach wird der String strA zum Browser geschrieben und dort als griechische Schrift angezeigt (vorausgesetzt, der Browser stellt die griechischen Buchstaben zur Verfügung).

Die nachfolgenden Schleifen schreiben die ANSI Werte (entsprechend der eingestellten Codepage) und die Unicode Werte des Strings strA zum Browser.

Nun stellt das Skript die Codepage 1252 ein, die alle Zeichen der westeuropäischen Sprachen beinhaltet. Als nun strA zum Browser geschickt wird, kann ASP die als Unicode gespeicherten Zeichen nicht richtig als Zeichen der eingestellten Codepage interpretieren (weil griechische Zeichen nicht in der westeuropäischen Codepage vorgesehen sind). Das Skript hat versucht, die Zeichen in strA von Unicode in die Ansi-Werte zu übersetzen, wie die geänderten Asc Werte anzeigen. Intern speichert ASP den String aber immer noch als den gleichen Unicode, wie die unveränderten Unicode-Werte anzeigen, die die AscW Funktion ausgibt.

Zum Schluß schreibt das Skript noch die einzelnen Zeichen des Strings in der HTML-kodierten Form &#xxx; zum Browser. Dadurch kann man sozusagen sowohl die eingestellte Codepage des ASP-Skripts als auch die verwendete Codepage des Browsers umgehen!

Schlußbemerkung

Unicode wird immer wichtiger, wie seine wachsende Verbreitung in professioneller Software bereits zeigt. In ASP-Seiten gibt es einige Berührungspunkte mit Unicode und der jeweiligen Interpretation gemäß der eingestellten Codepage des Webservers bzw. des Browsers.

Beim Zugriff von ASP auf andere Datenquellen (wie Dateien, Datenbanken, XML oder Streams) ist es unbedingt nötig, auch mit Unicode-codierten Daten umgehen zu können.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000831.zip

Verwandte Artikel

Fernöstliche Formulare / Unicode die Zweite
http:/www.aspheute.com/artikel/20001010.htm
Zahl, Datum und Währung korrekt formatiert ausgeben
http:/www.aspheute.com/artikel/20020704.htm

Links zu anderen Sites

Unicode.org
http://www.unicode.org

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.