[Catalyst] Strange Problem: gb2312 showed incorrect in mod_perl,
but correct in developer server
Moritz Onken
onken at houseofdesign.de
Thu Jun 5 11:17:49 BST 2008
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 <cuiyuming at gmail.com>:
>> 2008/6/2 J. Shirley <jshirley at gmail.com>:
>>>
>>> 2008/6/1 cui robin <cuiyuming at gmail.com>:
>>>> 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: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
More information about the Catalyst
mailing list