Changeset 23810

Show
Ignore:
Timestamp:
24.03.2011 10:20:25 (8 years ago)
Author:
sjm84
Message:

Fixing EmbeddedMetadataPlugin? to be Unicode compatible

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/plugins/EmbeddedMetadataPlugin.pm

    r23212 r23810  
    3030use BasePlugin; 
    3131 
     32use Encode; 
    3233use Image::ExifTool qw(:Public); 
    3334use strict; 
     
    3940{ 
    4041  @EmbeddedMetadataPlugin::ISA = ('BasePlugin'); 
    41 } 
    42  
    43  
     42  binmode(STDERR, ":utf8"); 
     43} 
     44 
     45my $encoding_plus_auto_list =  
     46    [ { 'name' => "auto", 
     47    'desc' => "{ReadTextFile.input_encoding.auto}" } ]; 
     48push(@{$encoding_plus_auto_list},@{$BasePlugin::encoding_list}); 
    4449 
    4550my $arguments = 
     
    4752    'desc' => "{HTMLPlugin.metadata_field_separator}", 
    4853    'type' => "string", 
    49     'deft' => "" } 
    50  
     54    'deft' => "" }, 
     55      { 'name' => "input_encoding", 
     56    'desc' => "{ReadTextFile.input_encoding}", 
     57    'type' => "enum", 
     58    'list' => $encoding_plus_auto_list, 
     59    'reqd' => "no", 
     60    'deft' => "auto" } 
    5161]; 
    5262 
     
    136146 
    137147        my $field = "ex.$group.$tag"; 
     148         
     149            my $encoding = $self->{'input_encoding'}; 
     150            if($encoding eq "auto") 
     151            { 
     152                $encoding = "utf8" 
     153            } 
     154         
     155             
    138156 
    139157        if (!defined $exif_metadata{$field}) 
     
    142160        } 
    143161 
     162        $field = Encode::decode($encoding,$field); 
    144163        my $metadata_done = 0; 
    145164        if (ref $value eq 'SCALAR') { 
     
    158177            $metadata_done = 1; 
    159178            foreach my $v (@$value) { 
     179            $v = Encode::decode($encoding,$v); 
    160180            push (@{$exif_metadata{$field}}, $self->gsSafe($v)); 
    161181            ++$metadata_count; 
     
    163183        } 
    164184        else { 
    165             if (defined $separator) { 
     185            $value = Encode::decode($encoding,$value); 
     186            if (defined $separator) { 
    166187            my @vs = split($separator, $value); 
    167188            $metadata_done = 1;