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


Reply via email to