Zeichenketten UTF-8 kodiert ausgeben
Steffen Flämig
- perl
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>
----------------------------------------------
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
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
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.
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
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.
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