X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=dump_oracle_table_for_pg;h=ebd7eb61f2f562b7a9a5f3a062559a8c21541331;hp=f8969e9137d68139cd4d97038f6dca09b892cb45;hb=9279b06588202c95ec978c72ec0ad471f5a5f7c1;hpb=1480d6fc7956765eafe92cf49868f1fcf720c390 diff --git a/dump_oracle_table_for_pg b/dump_oracle_table_for_pg index f8969e9..ebd7eb6 100755 --- a/dump_oracle_table_for_pg +++ b/dump_oracle_table_for_pg @@ -24,6 +24,8 @@ use warnings; use Carp; use DBI; use Getopt::Long; +use Encode; +use MARC::Charset qw/marc8_to_utf8/; my $host = 'localhost'; my $sid = $ENV{ORACLE_SID}; @@ -36,6 +38,7 @@ my $pg_table; my $base_table; my $column_prefix = ''; my $show_help; +my $src_charset; my $result = GetOptions( 'sid=s' => \$sid, @@ -48,6 +51,7 @@ my $result = GetOptions( 'pg-table=s' => \$pg_table, 'column-prefix=s' => \$column_prefix, 'inherits-from=s' => \$base_table, + 'source-charset=s' => \$src_charset, 'help' => \$show_help, ); @@ -94,7 +98,7 @@ sub export_table { my @data = map { normalize_value_for_tsv($_) } @$row; my $str = join("\t", @data); $str =~ s/\0//g; - print $fh "$str\n"; + print $fh encode('utf8', "$str\n"); } $sth->finish(); @@ -120,7 +124,15 @@ sub normalize_value_for_tsv { $val =~ s/\n/\\n/g; $val =~ s/\t/\\t/g; $val =~ s/\v/\\v/g; - return $val; + if ($src_charset) { + if ($src_charset eq 'marc8') { + return marc8_to_utf8($val); + } else { + return decode($src_charset, $val); + } + } else { + return $val; + } } else { return '\N'; }