[OPEN-ILS-DEV] AddedContent.pm produces garbled encoding for application/json

Linda Jansova skolkova at chello.cz
Sun Nov 25 10:56:01 EST 2018


Hi,

We have encountered a problem in AddedContent.pm's get_url function 
(both in Evergreen 3.1.4 and 2.12.6) - letters with diacritics from 
Czech added content provider Obalkyknih.cz have started being corrupted 
in our TPACs. Our added content provider has reported a switch to 
application/json MIME type.

After the switch we seem to be getting strange chars in summary (and 
table of contents if available as text, not as an image). We have tried 
to locate the problem in a separate Perl program and have come to a 
conclusion that data only get corrupted when fetched by the get_url 
function from AddedContent.pm.

We have added additional logging to the following part of AddedContent.pm:

# returns an HTPP::Response object
sub get_url {
     my( $self, $url ) = @_;

     $logger->info("added content getting [timeout=$net_timeout, 
errors_remaining=$error_countdown] URL = $url");
     my $agent = LWP::UserAgent->new(timeout => $net_timeout);

     my $res = $agent->get($url);
     $logger->info("added content request returned with code " . 
$res->code);

     #VJ
     $logger->info("added contet res is: " . $res->content);

     die "added content request failed: " . $res->status_line ."\n" 
unless $res->is_success;

     return $res;
}

And a corresponding sample log looks like this:

[2018-11-24 22:22:58] /usr/sbin/apache2 
[INFO:32231:AddedContent.pm:296:1543094555322319] added contet res is: 
[{"_id":"5bf904c905509b06182848ac","succ_toc_count":"0","cover_preview510_url":"https://cache.obalkyknih.cz/file/cover/1830989/preview510","ean":"9788026203667","uuid":["uuid:6ec863b0-055e-11e6-a611-005056827e51"],"cooperating_with":"https://www.cbdb.cz|CBDB.cz","succ_cover_count":"0","flag_bare_record":0,"csn_iso_690_source":"Národní 
knihovna Ä<U+008C>eské Republiky 
18.11.2018","rating_url":"https://www.obalkyknih.cz/stars?value=100","rating_sum":200,"cover_thumbnail_url":"https://cache.obalkyknih.cz/file/cover/1830989/thumbnail","oclc_other":[],"reviews":[],"part_root":1,"orig_height":"510","backlink_url":"https://www.obalkyknih.cz/view?isbn=9788026203667","toc_thumbnail_url":"https://cache.obalkyknih.cz/file/toc/362647/thumbnail","cover_medium_url":"https://cache.obalkyknih.cz/file/cover/1830989/medium","annotation":{"source":"Web 
obalkyknih.cz","html":"Encyklopedie sociální práce (ESP) 
pÅ<U+0099>ináší pÅ<U+0099>es 200 hesel ze vÅ¡ech oblastí sociální 
práce. ESP je postavena na interakÄ<U+008D>ním pojetí sociální 
práce. JedineÄ<U+008D>nost sociální práce spoÄ
<U+008D>ívá v tom, že operuje v poli mezi klientem a jeho sociálním 
prostÅ<U+0099>edím; pracovník je v obecném smyslu mediátorem mezi 
jednotlivcem a spoleÄ<U+008D>ností. Jeho úkolem je napomáhat 
sociálnímu fungování klientů a pomáhat spoleÄ<U+008D>nosti, aby 
citlivÄ<U+009B> reagovala na potÅ<U+0099>eby svých Ä<U+008D>lenů. Tato 
dvojitá mediaÄ<U+008D>ní role je role angažovaná. Je zakotvená 
hodnotovÄ<U+009B> v náboženství nebo v huma
[2018-11-24 22:22:58] /usr/sbin/apache2 
[INFO:32231:ObalkyKnih.pm:228:1543094555322319] ObalkyKnih.cz for 
books?isbn=9788026203667 response was 
[{"_id":"5bf904c905509b06182848ac","succ_toc_count":"0","cover_preview510_url":"https://cache.obalkyknih.cz/file/cover/1830989/preview510","ean":"9788026203667","uuid":["uuid:6ec863b0-055e-11e6-a611-005056827e51"],"cooperating_with":"https://www.cbdb.cz|CBDB.cz","succ_cover_count":"0","flag_bare_record":0,"csn_iso_690_source":"Národní 
knihovna Ä<U+008C>eské Republiky 
18.11.2018","rating_url":"https://www.obalkyknih.cz/stars?value=100","rating_sum":200,"cover_thumbnail_url":"https://cache.obalkyknih.cz/file/cover/1830989/thumbnail","oclc_other":[],"reviews":[],"part_root":1,"orig_height":"510","backlink_url":"https://www.obalkyknih.cz/view?isbn=9788026203667","toc_thumbnail_url":"https://cache.obalkyknih.cz/file/toc/362647/thumbnail","cover_medium_url":"https://cache.obalkyknih.cz/file/cover/1830989/medium","annotation":{"source":"Web 
obalkyknih.cz","html":"Encyklopedie sociální práce (ESP) 
pÅ<U+0099>ináší pÅ<U+0099>es 200 hesel ze vÅ¡ech oblastí sociální 
práce. ESP je postavena na interakÄ<U+008D>ním pojetí sociální 
práce. JedineÄ
<U+008D>nost sociální práce spoÄ<U+008D>ívá v tom, že operuje v 
poli mezi klientem a jeho sociálním prostÅ<U+0099>edím; pracovník je 
v obecném smyslu mediátorem mezi jednotlivcem a spoleÄ<U+008D>ností. 
Jeho úkolem je napomáhat sociálnímu fungování klientů a pomáhat 
spoleÄ<U+008D>nosti, aby citlivÄ<U+009B> reagovala na potÅ
<U+0099>eby svých Ä<U+008D>lenů. Tato dvojitá mediaÄ<U+008D>ní role 
je role angažovaná. Je zakotvená hodnot

Our Perl code used for testing purposes

#!usr/bin/perl
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $response = $ua->get( 
'http://cache.obalkyknih.cz/api/books?isbn=978-80-262-0366-7' );
my $content = $response->content;
print $content ;

produces data with the correct encoding:

[{"_id":"5bf904c905509b06182848ac","succ_toc_count":"0","cover_preview510_url":"https://cache.obalkyknih.cz/file/cover/1830989/preview510","ean":"9788026203667","uuid":["uuid:6ec863b0-055e-11e6-a611-005056827e51"],"cooperating_with":"https://www.cbdb.cz|CBDB.cz","succ_cover_count":"0","flag_bare_record":0,"csn_iso_690_source":"Národní 
knihovna České Republiky 
18.11.2018","rating_url":"https://www.obalkyknih.cz/stars?value=100","rating_sum":200,"cover_thumbnail_url":"https://cache.obalkyknih.cz/file/cover/1830989/thumbnail","oclc_other":[],"reviews":[],"part_root":1,"orig_height":"510","backlink_url":"https://www.obalkyknih.cz/view?isbn=9788026203667","toc_thumbnail_url":"https://cache.obalkyknih.cz/file/toc/362647/thumbnail","cover_medium_url":"https://cache.obalkyknih.cz/file/cover/1830989/medium","annotation":{"source":"Web 
obalkyknih.cz","html":"Encyklopedie sociální práce (ESP) přináší přes 
200 hesel ze všech oblastí sociální práce. ESP je postavena na 
interakčním pojetí sociální práce. Jedinečnost sociální práce spočívá v 
tom, že operuje v poli mezi klientem a jeho sociálním prostředím; 
pracovník je v obecném smyslu mediátorem mezi jednotlivcem a 
společností. Jeho úkolem je napomáhat sociálnímu fungování klientů a 
pomáhat společnosti, aby citlivě reagovala na potřeby svých členů. Tato 
dvojitá mediační role je role angažovaná. Je zakotvená hodnotově v 
náboženství nebo v humanitních ideálech. V podobě tematicky uspořádaných 
samostatných hesel poskytuje toto rozsáhlé dílo přehled psychologických 
a sociologických teorií a přístupů s dopadem do sociální práce, 
náboženský, filozofický a společenský kontext oboru. Přináší přehled 
klíčových pojmů, technik a metod sociální práce, ohrožených skupin a 
poskytovaných služeb. Samostatnou část tvoří hesla charakterizující 
profesi sociálního pracovníka a hesla zabývající se výzkumem v oblasti 
sociální práce. ESP reflektuje domácí vývoj oboru v evropském kontextu a 
zohledňuje i širší mezinárodní zřetel. Hesla popisují daný jev a jeho 
historii, hodnotová východiska, aplikační možnosti a 
výzkum.","id":"2391500"},"csn_iso_690":"MATOUŠEK, Oldřich. 
<i>Encyklopedie sociální práce. </i>Vyd. 1. Editor Alois KŘIŠŤAN. Praha: 
Portál, 2013. 570 
s.","nbn":"cnb002436000","rating_avg100":"100","orig_width":"346","rating_avg5":5,"toc_pdf_url":"https://cache.obalkyknih.cz/file/toc/362647/pdf","ean_other":[],"nbn_other":[],"rating_count":2,"cover_icon_url":"https://cache.obalkyknih.cz/file/cover/1830989/icon","dig_obj":{"BOA001":{"public":0,"url":"https://kramerius.mzk.cz/search/i.jsp?pid=uuid:6ec863b0-055e-11e6-a611-005056827e51","uuid":"uuid:6ec863b0-055e-11e6-a611-005056827e51"},"ABA001":{"public":0,"url":"http://kramerius4.nkp.cz/search/i.jsp?pid=uuid:6ec863b0-055e-11e6-a611-005056827e51","uuid":"uuid:6ec863b0-055e-11e6-a611-005056827e51"}},"bib_year":"2013","oclc":"(OCoLC)852382182","bib_title":"Encyklopedie 
sociální práce","succ_bib_count":"0","book_id":"112038753"}]

It confirms that data from Obalkyknih.cz are in UTF-8.

Basically, what happens when things go wrong is this (using letter á as 
an example): the original character U+00E1 
(http://www.fileformat.info/info/unicode/char/e1/index.htm) is encoded 
as two letters á (\u00c3\u00a1 as represented in memcached log). à is 
U+00E3 (https://www.fileformat.info/info/unicode/char/00c3/index.htm) 
while ¡ is U+00A1 
(http://www.fileformat.info/info/unicode/char/00A1/index.htm).

A description at 
https://www.effectiveperlprogramming.com/2011/08/know-the-difference-between-character-strings-and-utf-8-strings/ 
probably gives some ideas how encoding could get broken in Perl.

However, we are not sure if the issue is in AddedContent.pm or in our 
Apache configuration (because our test Perl code run from bash works 
okay but AddedContent.pm called from Apache does not).

Does anybody have any idea where to look next to fix it?

Thank you in advance!

Linda



More information about the Open-ils-dev mailing list