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

Jason Stephenson jason at sigio.com
Mon Jan 14 08:45:04 EST 2019


Hi, Linda.

Good find! That sounds like a bug to me. Could you submit a Launchpad
bug (if there isn't one already) and a patch commit, please?

Depending on which module this occurs in, the fix may not be as simple
as using utf8::decode. It could be that we need code to determine the
character set from the HTTP response.

Cheers,
Jason

On 1/14/19 2:38 AM, Linda Jansova wrote:
> Hi,
> 
> Just letting you know that our developer has eventually changed the
> encoding of the data blob coming from Obalkyknih.cz from UTF-8 to Perl's
> internal representation:
> 
> utf8::decode($response_content);
> 
> Adding this step before further data processing takes place has
> successfully solved the problem of seeing gibberish characters in our
> catalog :-).
> 
> Linda
> 
> On 11/25/18 4:56 PM, Linda Jansova wrote:
>> 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