Bei der Verwendung von HTTP-GET und HTTP-POST sehen die Standards nur das Versenden von Octets vor, ohne dass man die Möglichkeit hat, das Encoding zu markieren. Das tatsächlich verwendete Encoding kann man nur aus der Kenntnis des Encodings der versendenden Quelle wissen. Wenn also ein Formular auf einer HTML-Seite, die das Charset UTF-8 hat, versendet wird, sind die versendeten GET- oder POST-Daten auch in UTF-8 kodiert.

Die Funktion CGI::param() kann daher auch nur mit Octets umgehen. Mit einer kleinen Schleife lassen sich die Parameter-Keys und -Values leicht umwandeln (in diesem Beispiel davon ausgehend, dass die Parameter in UTF-8 kodiert sind):

    perl -MCGI=param -MEncode -MData::Dumper -e '
        for $key (param) {
            $new_param{decode_utf8($key)} =
               [ map { decode_utf8($_) } param($key)];
        }
        warn Dumper \%new_param;
    ' äöü=äöü
      

 
^^
Copyright Slaven Rezić Februar 2006