Apache might force the encoding of specific mime types. Check the
apache config
and look for the content type View::JSON generates.
cheers,
moritz
Am 02.06.2008 um 18:39 schrieb J. Shirley:
2008/6/1 cui robin <[EMAIL PROTECTED]>:
2008/6/2 J. Shirley <[EMAIL PROTECTED]>:
2008/6/1 cui robin <[EMAIL PROTECTED]>:
Hi,
When a page loaded in firefox, then it will send a ajax request
to get
data
in json format.
Some gb2312 words is in the json data.
When catalyst is started by /home/robin/CBS/script/cbs_server.pl,
the
data
got by client is same as the data i print on the screen by
$c->log->debug().
It's showed corrected in firefox client or ie client.
But when catalyst is running by apache mod_perl, the data got by
client
is
different from the data i print on the screen by $c->log-
>debug().It's
showed incorrected.
A chinese world in gb2312 charset have 2 bytes. what I found in
the
client
is that:
2 bytes of a chinese word was splited, and a octal byte \303 or
\302 was
added before every byte. So showed incorrect in client.
Anyone meet the same problem when using mod_perl?
Thanks!
Robincui
How are you generating the JSON? We had a similar circumstance
(although our production server would also exhibit failures under
the
built-in server) because of varying JSON.pm versions.
Make sure you use a JSON module that properly understands
unicode. I
try to use Catalyst::View::JSON wherever possibly, and if it isn't
then JSON::XS::encode_json( $perlref ) works the most reliably.
-J
I use standard JSON module [use JSON;] from cpan,version is 2.07.
code like
below:
my $json = new JSON;
$json->canonical(1);
my $response = $json->encode($var);
But i think the problem is nothing to do with JSON, for some
points like
below:
1. The problem will not occur when I use catalyst's built-in server
2. After JSON module convert a hash to JSON data, I use $c->log-
>debug
output to screen, I saw it was correct.
I think the problem occur when apache (mod_perl) send data to
client. the
data was modified. But I don't kown why?
Some code like below:
my $jsResponse = $ajaxRequest->{response} . "\n
$callback_function";
$c->log->debug("JS Response:\n$jsResponse"); # the showed on the
screen
is correct;
$c->response->content_type('text/html; charset=GB2312');
$c->response->body($jsResponse);
The mod_perl,apache,perl version like below:
[Mon Jun 02 12:28:31 2008] [notice] Apache/2.0.55 (Unix) PHP/5.2.3
mod_perl/2.0.3 Perl/v5.8.8 configured -- resuming normal operations
Any other solution?
Use Firebug, or related tools, and send the request and response
headers outside of mod_perl as the browser sees them.
That will help gather prudent information
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/