Forum Doku Wiki Blog

Forumsarchiv 2007, März
Zeichenketten UTF-8 kodiert ausgeben

archivierte Beiträge lesen

  1. (PERL) Zeichenketten UTF-8 kodiert ausgeben von Steffen Flämig, 05. 03. 2007, 09:23

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 09:23 Uhr von Steffen Flämig veröffentlicht.

Hallo,

ich programmiere gerade meine erste Ajax Seite.
Die Daten werden serverseitig mit Perl generiert und mit json übergeben.

Dabei gibts Probleme sobald Umlaute dabei sind.

Ich nemhe an, es liegt daran, dass die einfache Verwendung eines:
print "{'testText':'Schöne Grüße'}";
den Text nicht -wie wohl von Ajax erwartet- UTF-8 kodiert ausgibt.

Lieg ich da richtig und wenn ja, wie geben ich text mit Perl in der richtigen Kodierung aus?

Gurß

Steffen





Hier mal der auf das Problem reduzierte Quellcode:

Serverseite:
----------------------------------------------
#!C:\Perl\bin\Perl.exe
print "Content-type: text/html\n\n";
print "{'testText':'Schöne Grüße'}";
----------------------------------------------



Klientseite
----------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test</title>
<script type="text/javascript">

var http_request = false;
function makeRequest(query, responseFunction)
{
 http_request = false;
 if (window.XMLHttpRequest)
 { // Mozilla, Safari,...
  http_request = new XMLHttpRequest();
  if (http_request.overrideMimeType)
  {
   http_request.overrideMimeType('text/xml');
  }
 } else
 if (window.ActiveXObject)
  { // IE
   try
   {
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e)
   {
    try
   {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e) {}
  }
 }
 if (!http_request)
 {
  alert('Giving up :( Cannot create an XMLHTTP instance');
  return false;
 }
 http_request.onreadystatechange = eval(responseFunction);
 http_request.open('POST', 'http://localhost/cgi-bin/ajaxTest_2.pl', true);
 http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 http_request.send(query);
}


function test()
{
 makeRequest("foo", showResult);
}

function showResult()
{
  if (http_request.readyState == 4)
  {

       if (http_request.status == 200)
       {
     var list = eval("(" + http_request.responseText + ")");
     alert(list.testText);
   }
 }
}

</script>
<style type="text/css">
</style>
</head>

<body onload="test()">
Test
</body>
</html>
----------------------------------------------

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 09:57 Uhr von _roro veröffentlicht.

Hallo,

> Lieg ich da richtig und wenn ja, wie geben ich text mit Perl in der richtigen Kodierung aus?

Nicht ganz richtig. Die utf-8 Kodierung musst Du dem Browser mitteilen.

Das Prob. ist wohl eher die Geschichte mit URI::Escape. Schau mal hier: http://rolfrost.de/cgi-bin/xmlhttpreq.cgi etwa in der Mitte hab ichs beschrieben.

roro

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 10:43 Uhr von Steffen Flämig veröffentlicht.

Hallo,

> Das Prob. ist wohl eher die Geschichte mit URI::Escape. Schau mal hier: http://rolfrost.de/cgi-bin/xmlhttpreq.cgi etwa in der Mitte hab ichs beschrieben.

Danke, genau das, was ich suchte :-).

Gruß
Steffen

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 13:14 Uhr von Struppi veröffentlicht.

> Das Prob. ist wohl eher die Geschichte mit URI::Escape. Schau mal hier: http://rolfrost.de/cgi-bin/xmlhttpreq.cgi etwa in der Mitte hab ichs beschrieben.

Wozu setzt du hier das Modul ein?
Da du die Parameter weiter oben mit dem CGI Modul ausliest, werden die Parameter doch sowieso schon umgewandelt.

Struppi.
--
Javascript ist toll (Perl auch!)

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 13:24 Uhr von _roro veröffentlicht.

hi,

> > Das Prob. ist wohl eher die Geschichte mit URI::Escape. Schau mal hier: http://rolfrost.de/cgi-bin/xmlhttpreq.cgi etwa in der Mitte hab ichs beschrieben.
>
> Wozu setzt du hier das Modul ein?
> Da du die Parameter weiter oben mit dem CGI Modul ausliest, werden die Parameter doch sowieso schon umgewandelt.

Jow, das schon. Aber zum Zurücksenden vom Webserver an das XMLHTTP-Objekt brauchts wieder diese Umwandlung:

[UserAgent XMLHttp - Object] <----------------------------------------------------- [Webserver]
'gr%FCne%20B%E4ren%20gibt%20es%20nicht' <------------------ uri_escape('grüne Bären gibt es nicht')

roro

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 13:36 Uhr von Struppi veröffentlicht.

> hi,
>
> > > Das Prob. ist wohl eher die Geschichte mit URI::Escape. Schau mal hier: http://rolfrost.de/cgi-bin/xmlhttpreq.cgi etwa in der Mitte hab ichs beschrieben.
> >
> > Wozu setzt du hier das Modul ein?
> > Da du die Parameter weiter oben mit dem CGI Modul ausliest, werden die Parameter doch sowieso schon umgewandelt.
>
> Jow, das schon. Aber zum Zurücksenden vom Webserver an das XMLHTTP-Objekt brauchts wieder diese Umwandlung:

seit wann das?
Ich nutze manchmal CGI::escape() um im HTML Code einen Link der kodiert ist zu erzeugen, aber Text muss doch nicht url kodiert werden?

Struppi.
--
Javascript ist toll (Perl auch!)

Zeichenketten UTF-8 kodiert ausgeben

Der folgende Beitrag wurde am 05. 03. 2007, 14:25 Uhr von Siechfred veröffentlicht.

> Ich nemhe an, es liegt daran, dass die einfache Verwendung eines:
> print "{'testText':'Schöne Grüße'}";
> den Text nicht -wie wohl von Ajax erwartet- UTF-8 kodiert ausgibt.

Hast du dir schon mal das utf8-Pragma angesehen?

Siechfred
--
Ich bin strenggenommen auch nur interessierter Laie. (molily)

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4