0ab25f52cfa520c65bb6ed985181f26cc79cc8ea
[eprints3-migration.git] / mtoolkit / utf8-fix.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 use Data::Dump qw(dump);
7 use Encode;
8 use bytes;
9
10 my $junk = '[\xC0-\xC4][\x80-\xC4]+';
11
12 my $file = shift @ARGV;
13 my $stat;
14
15 open(my $fh, '<:raw', $file) || die "$file: $!";
16
17 while(<$fh>) {
18
19 my $orig = $_;
20
21 # češki
22 s/\xC3\x83\xC2\x85\xC3\xA2\xC2\x84\xC2\xA2/ř/gs && $stat->{'r v'}++;
23 s/\xC3\x83\xC2\x83\xC3\x82\xC2\xBD/ý/gs && $stat->{'y /'}++;
24 s/\xC3\x83\xC2\x84\xC3\x8B\xC2\x86/Č/gs && $stat->{'Č ?'}++;
25
26 s/\xC3\x83\xC2\x83\xC3\xA2\xC2\x80\xC2\xB0/É/gs && $stat->{'E actue'}++;
27 s/\xC3\x83\xC2\x83\xC3\xA2\xC2\x80\xC2\xA6/Å/gs && $stat->{'A circle'}++;
28 # "MAQBŪLI 'ĀRIF" (Potur Şāhidī). 
29 s/\xC3\x83\xC2\x84\xC3\xA2\xC2\x82\xC2\xAC/Ā/gs && $stat->{'A line'}++;
30 s/\xC3\x83\xC2\x83\xC3\xA2\xC2\x80\xC2\x99/V/gs && $stat->{'V fake'}++;
31
32 # njemački
33 s/\xC3\x83\xC2\x83\xC3\x85\xC2\xB8/ß/gs && $stat->{'ss'}++;
34
35 s/$junk\xC3\x82\xC2\x8D/č/gs && $stat->{'cv'}++;
36 s/\xC3\x84\xC2\x8D/č/gs && $stat->{'cv 84'}++;
37
38 s/$junk\xC2\x80\xC2\xA1/ć/gs && $stat->{"c"}++;
39 # #Buri\xC3\x84\xC2\x87.pdf
40 s/\xC3\x84\xC2\x87/ć/gs && $stat->{'c C384C287'}++;
41
42 s/$junk\xC3\x82\xC2\xA1/š/gs && $stat->{'s'}++;
43 #Ma\xC3\x85\xC2\xA1a
44 s/\xC3\x85\xC2\xA1/š/gs && $stat->{'s C385C2'}++;
45 s/$junk\xC2\x80\xC4\xA1/š/gs && $stat->{'s C4'}++;
46
47 s/$junk\xC3\x82\xC2\xBE/ž/gs && $stat->{'z'}++;
48
49 s/$junk\xC2\x80\xC2\x98/đ/gs && $stat->{'d'}++;
50 s/$junk\xC3\x82\xC2\x90/Đ/gs && $stat->{'D'}++;
51
52 s/$junk\xC2\x80\xC2\x92/Č/gs && $stat->{'Cv'}++;
53 s/$junk\xC3\x85\xC2\x92/Č/gs && $stat->{'Cv C385'}++;
54 s/$junk\xC2\x80\xC2\xA0/Ć/gs && $stat->{'C'}++;
55 s/$junk\xC3\x82\xC2\xBD/Ž/gs && $stat->{'Z'}++;
56 s/\xC3\x85\xC2\xBD/Ž/gs && $stat->{'Z'}++;
57 s/$junk\xC3\x82\xC2\xA0/Š/gs && $stat->{'S'}++;
58 s/$junk\xC3\x82\xC2\xA6/Š/gs && $stat->{'S C2A6'}++;
59 s/\xC3\x85\xC2\xA0/Š/gs && $stat->{'S C385C2A0'}++;
60
61 s/$junk\xC2\xAB/"/gs && $stat->{'" open'}++;
62 s/$junk\xC2\xBB/"/gs && $stat->{'" close'}++;
63
64 s/$junk\xC2\xBE/"/gs && $stat->{'"'}++;
65 s/$junk\xC2\x93/"/gs && $stat->{'"'}++;
66
67 s/$junk\xC3\x82\xC2\xB2/"/gs && $stat->{'" C2B2'}++;
68
69 s/$junk\xC2\x84\xC2\xA2/'/gs && $stat->{"'"}++;
70 s/$junk\xC3\x82\xC2\xB4/'/gs && $stat->{"' C2B4"}++;
71 s/$junk\xC3\x8B\xC2\x9C/'/gs && $stat->{"' C29C"}++;
72 s/$junk\xC2\xAD/-/gs && $stat->{'-'}++;
73
74 s/$junk\xC2\x80\xC2\x9C/-/gs && $stat->{'--'}++;
75 s/$junk\xC2\x9D/-/gs && $stat->{'-- ?'}++;
76
77 s/$junk\xC3\x82\xC2\xA2/- /gs && $stat->{'dot'}++;
78
79
80
81         my $e = $_;
82         if ( $e =~ m/([\xC0-\xC4][\x80-\xff]{3,99})/s ) {
83                 warn "XXX ", dump($e), "\n$e\n";
84         }
85         print $e;
86 }
87
88 warn dump($stat);