HP-User: cgi-Datenfluß

Beitrag lesen

Morgen hotti

Wie ich schon schrieb: Mit der _Datenmenge an sich_ sehe ich kein Problem.

Dann war ich bei der Problemanalyse auf dem falschen Dampfer. *g*

Also. Wenn es nur ASCII-Zeichen sind, liefert

length($str); die Anzahl der Zeichel als Anzahl der Oktetten (Bytes).

So, jetzt hier mal langsam  - in Zeitlupe - sozusagen:
Was ich aus meinen Basic-Zeiten noch weiß ist, daß ASCII eine 3-stellige Zahl ist, die für ein Zeichen steht. Beispiel: großes "Ä" = 142 (extended ASCII-Codes)oder großes "A" =065 (normal ASCII-Codes).

Hier die entsprechende AsciiTabelle.

Wo ist jetzt hier der Octettenwert? Sind nicht alle ASCII-Codes 3-Stellig? Auch dein Einwand daß Umlaute mehr Platz berauchen stimmt zwar mit meinem "Praxistest" überein, aber nach der ASCII-Tabelle sind doch auch die Umlaute 3-stellig?

UTF-8: Du kbekommst mit CGI::param die Oktetten in Dein CGI-Script.

Bis hierher kann ich dir folgen. Das heißt meine Zeichen liegen im Perl als Octetten vor? (was immer das sein mag)

Diese stellen UTF-8-kodierte Zeichen dar, weil Dein Formular mit dieser Kodierung ausgeliefert wird.

Auch das verstehe ich noch. Browser an cgi in utf-8

Die Funktion length($input) würde Dir die Anzahl der Oktetten liefern.

Aha, da kommen wir der Sache schon näher: Das heißt mein Programm zählt aktuell die Octetten?

Wenn Du jedoch die Anzahl der Zeichen haben möchtest, musst Du da was tun,

Also ist der 3-stellige ASCII-Wert nicht gleich dem Octettenwert - sprich - das sind zwei verschiedene paar Schuhe?

z.B. sowas:

  
use Encode;  
my $utf8oktetten = CGI::param('input'); #Übergabe Input an Skalar  
my $utf8str = decode('utf-8', $utf8oktetten); # decodiert utf8oktteten in utf-8 und übergibt an $utf8str  

> my $anzahl_bytes = length($utf8oktetten); # mit diesen beiden Skalaren willst du  
> my $anzahl_zeichen = length($utf8str);    # mir den Unterschied verdeutlichen?  

Bemerke den Unterschied, wenn Umlaute drin sind

Alles Klar. Ich werde deinen Code in mein Programm implementieren. Vielleicht finde ich auf google eine Oktettenerklärung und wie sich diese vom ACII Zeichen differenzieren.

Gruß HP-User