koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] koha/z3950 processz3950queue [rel_2_2]


From: paul poulain
Subject: [Koha-cvs] koha/z3950 processz3950queue [rel_2_2]
Date: Mon, 25 Sep 2006 14:02:42 +0000

CVSROOT:        /cvsroot/koha
Module name:    koha
Branch:         rel_2_2
Changes by:     paul poulain <tipaul>   06/09/25 14:02:42

Modified files:
        z3950          : processz3950queue 

Log message:
        fix for encoding issues. Usefull only for libraries with UNIMARC & 
latin1 framework.
        
        Note that this hack is necessary because of ZOOM behaviour that is 
different to Net::Z3950.
        It must NOT be reported to rel_3 or dev_week, because they are full 
unicode.
        
        PS : yes, it's quite a dirty hack, because it don't solve the problem, 
it just override it...

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/z3950/processz3950queue?cvsroot=koha&only_with_tag=rel_2_2&r1=1.13.2.5&r2=1.13.2.6

Patches:
Index: processz3950queue
===================================================================
RCS file: /cvsroot/koha/koha/z3950/Attic/processz3950queue,v
retrieving revision 1.13.2.5
retrieving revision 1.13.2.6
diff -u -b -r1.13.2.5 -r1.13.2.6
--- processz3950queue   22 Sep 2006 15:51:40 -0000      1.13.2.5
+++ processz3950queue   25 Sep 2006 14:02:42 -0000      1.13.2.6
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 
-# $Id: processz3950queue,v 1.13.2.5 2006/09/22 15:51:40 tipaul Exp $
+# $Id: processz3950queue,v 1.13.2.6 2006/09/25 14:02:42 tipaul Exp $
 use MARC::Record;
 use C4::Context;
 use DBI;
@@ -285,11 +285,48 @@
                                                                        for 
($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
                                                                                
my $rec=$rs->record($i-1);
                                                                                
my $marcdata = $rec->raw();
-                                                                               
#my $marcrecord = MARC::Record->new_from_usmarc($marcdata);
-                                                                               
#warn $marcrecord->as_formatted(); 
+                                        if 
(C4::Context->preference("MARCFLAVOUR") eq "UNIMARC"){
+                                          warn "marcdata :".$marcdata;
+                                          my $marcrecord = 
MARC::Record->new_from_usmarc($marcdata);
+                                          use Encode;
+                                          use Encode::Guess;
+                                          my $targetcharset="utf8" if 
(C4::Context->preference("TemplateEncoding") eq "utf-8");
+                                          $targetcharset="latin1" if 
(C4::Context->preference("TemplateEncoding") eq "iso-8859-1");
+                                          my $decoder = 
guess_encoding($marcdata, qw/utf8 latin1/);
+                                          die $decoder unless ref($decoder);
+                                          warn "decodage : ".$decoder->name;
+                                          warn "decodage cible : 
".$targetcharset;
+                                          my $newRecord=MARC::Record->new();
+                                          foreach my $field 
($marcrecord->fields()){
+                                            my $newField=$field->clone;
+                                            if ($field->tag()<'010'){
+                                              
$newRecord->insert_grouped_field($field);
+                                            } else {
+                                              foreach my $subfield 
($newField->subfields()){
+  #                                               warn ' valeur avant 
encodage'.$subfield->[1];
+#                                                 map 
{char_decode($_,"UNIMARC");Encode::from_to($_,$decoder->name,$targetcharset);$_=~tr#\r##}
 @$subfield;
+                                                map 
{char_decode($_,"UNIMARC");Encode::from_to($_,$decoder->name,$targetcharset);$_=~tr#\r##}
 @$subfield;
+  #                                               warn ' valeur apres 
encodage'.$subfield->[1];
+  #                                               warn ' valeur 
theorique'.Encode::from_to($_,$decoder->name,$targetcharset);
+                                                if (($newField->tag eq '100')) 
{
+                                                    
substr($subfield->[1],26,2,"0103") if ($targetcharset eq "latin1");
+                                                    
substr($subfield->[1],26,4,"5050") if ($targetcharset eq "utf8");
+                                                }
+                                                
$newField->update($subfield->[0]=>$subfield->[1])
+                                              }
+                                              
$newRecord->insert_grouped_field($newField);
+                                            }
+                                          }
+                                          $newRecord->encoding('UTF-8') if 
($targetcharset eq 'utf8');
+                                          $newRecord->encoding('MARC-8') if 
($targetcharset ne 'utf8');
+                                          warn $newRecord->as_formatted(); 
+                                          $globalencoding = $targetcharset;
+                                          $result.=$newRecord->as_usmarc;
+                                        } else {
                                                                                
$globalencoding = ref($rec);
                                                                                
$result.=$marcdata;
                                                                        }
+                                                                       }
                                                                        my 
@x=split /::/,$globalencoding;
                                                                        my 
($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = 
ImportBreeding($result,-1,"Z3950-$globalname",$x[3],$random);
                                                                        my 
$scantimerend=time();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]