Thread Zeichensatz der DB herausfinden: Paradox über BDE & ODBC (1 answers)
Opened by pktm at 2005-01-19 23:56

ptk
 2005-01-20 20:50
#32867 #32867
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=pktm,19.01.2005, 22:56]Hallo!

Wies zufällig wer, wie man den Zeichensatz einer Paradox-Datenbank herausfindet, welche man über ODBC mittels dem Modul Win32::ODBC anspricht?
Die Einstellversuche über den BDE haben nicht funktioniert.

mfg pktm[/quote]
Ich habe mal schnell ein Skript geschrieben, welches beim Erraten eines Encodings hilft. In $expected_octets schreibst du die Zeichen, die das fremde Encoding ausspucken sollte. $expected_octets sollte das Encoding sein, in dem $expected_octets geschrieben ist (normalerweise iso-8859-1 oder so). In $got_octets schreibt man die gleichen Zeichen wie in $expected_octets, aber diesmal im fremden Encoding. Als Ergebnis bekommt man eine Liste der moeglichen Treffer.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/perl -w

use strict;

use Encode qw(decode);
use List::Util qw(max);

my $expected_octets = "äöü";
my $expected_charset = "iso-8859-1";

my $got_octets = "\204\224\201";

my @characters = split //, decode($expected_charset, $expected_octets);

my @res;
for my $encoding (Encode->encodings(":all")) {
eval {
my @got_characters = split //, decode($encoding, $got_octets);
my $max_length = max(scalar(@characters), scalar(@got_characters));
my $hits = 0;
for my $i (0 .. $max_length-1) {
no warnings 'uninitialized';
$hits++ if ($characters[$i] eq $got_characters[$i]);
}
push @res, { Quality => ($hits/$max_length)*100,
Encoding => $encoding,
};
};
}

print join("", map { sprintf "%-20s: %d%%\n", $_->{Encoding}, $_->{Quality} } sort { $b->{Quality} <=> $a->{Quality} } grep { $_->{Quality} > 0 } @res);

View full thread Zeichensatz der DB herausfinden: Paradox über BDE & ODBC