Schrift
[thread]4848[/thread]

Eurozeichen in Perl darstellen: wie? (Seite 2)

Leser: 4


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
jemand
 2005-01-14 17:45
#42748 #42748
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
Da schreibt man sich halt mal schnell nen testprogramm
das ist zwar nur für dateien aber bei datenbanken wirds wohl auch nicht viel anders sein
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/perl
use strict;
use warnings;

use Tk;

my $main = MainWindow->new();

$main->Label(-text => 'Bitte machen Sie eine Eingabe: ',
)
->pack(-side => 'top',
-anchor => 'w',
);

my $eingabe= $main->Entry(-background => 'white')
->pack(-side => 'top' );

$main->Label(-text => ' ',
)
->pack(-side => 'top',
);

$main->Button(-text => 'Speichern',
-command => \&save,
)
->pack(-side => 'left',
);
$main->Label(-text => ' ',
)
->pack(-side => 'left',
);
$main->Button(-text => 'Speicher lesen',
-command => \&read_saved,
)
->pack(-side => 'left',
);





MainLoop();


sub save {
my $top1 = $main->Toplevel();
open(FH, '>', 'test.txt') or die;
print FH $eingabe->get();
close(FH);
$top1->Label(-text => 'Ihre Eingabe wurde gespeichert! ' ,
)
->pack(-side => 'top'
);

$top1->Button(-text => 'OK',
-command => [ $top1 => 'destroy' ],
)
->pack(-side => 'bottom',
-fill => 'both',
);

$eingabe->delete(0, 'end');
}

sub read_saved {
my $top1 = $main->Toplevel();
open(FH, '<', 'test.txt') or die;
my @eingabe = <FH>;
close(FH);
$top1->Label(-text => 'Ihre letzte Eingabe war:' ."\n" .$eingabe[0],
)
->pack(-side => 'top'
);

$top1->Button(-text => 'OK',
-command => [ $top1 => 'destroy' ],
)
->pack(-side => 'bottom',
-fill => 'both',
);
$eingabe->delete(0, 'end');
}


iss das eingabe_machen ausm tk-tut halt abgeändert...
bei mir ging bei perl 5.6.1
auf perl 5.8.4 werd ich später auch noch testen wenn sich was ändert sach ichs halt

achja: du solltest bei deinem späteren prog halt dann beachten dass ¤ auch von der schriftart unterstüzt wird(bei einigen älteren iss das wohl nicht der fall...)

Jemand
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Strat
 2005-01-14 21:22
#42749 #42749
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
manchmal hilft es, wenn man den datenbankoutput auf utf-8 setzt... wie das geht, haengt von der DB ab... und auch davon, wie es zum zeitpunkt des datenimportes war\n\n

<!--EDIT|Strat|1105730643-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2005-01-17 11:51
#42750 #42750
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn du Glueck hast, sind die Sonderzeichen in der Datenbank wenigstens konsistent. Dann kansnt du Encode verwenden, um in einen anderen Zeichensatz zu konvertieren, also
Code: (dl )
1
2
use Encode;
Encode::from_to($string, "cp1252", "utf-8");

(Die Argumentreihenfolge von from_to bitte in der Manpage nachlesen, die kann ich mir nie merken)
pktm
 2005-01-17 22:10
#42751 #42751
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Habe jetzt im BDE-Administrator (schund Paradox-Datenbanken :angry: ) den Zeichensatz int850, latin1 und noch irgend was probiert.
Bei den ODBC-Einstellungen kann man leider nichts in Bezug auf den Zeichensatz einstellen (außer bei der Sortierreihenfolge oder so, und das hat scheinbar keine Wirkung auf den Output bei mir).
Außerdem habe ich mal an folgendem Beispiel mit utf8 und Encode gespielt:
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
#!/Perl/bin/perl
use strict;
use Tk;
use Tk::Font;
use Encode;
use utf8;

# l1
my $val = 'äöüߤ';
utf8::encode($val);
Encode::from_to($val,"cp1250","iso-8859-1");
#Encode::from_to($val,"iso-8859-1", "utf8");

# l2
my $octets = Encode::encode("iso-8859-1", $val);
#print $octets;

my $mw = Tk::MainWindow->new();

my $l1 = $mw->Label(-font => $mw->Font(-family=>'Verdana'), -textvariable=>\$val )->pack();
my $l2 = $mw->Label(-font => $mw->Font(-family=>'Verdana'), -textvariable=>\$octets)->pack();

MainLoop;

Resultat: Wenn ich Werte aus der Datenbank auslese kann ich encoden wie ich will, ich kann die Zeichen nicht darstellen.
Außerdem bleibt mir die Darstellung des Euro-Zeichens komplett verwehrt.
Das depriiert irgendwie.
Werde mal sehen ob ich noch irgendwas finde.
thx & mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2005-01-18 00:05
#42752 #42752
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Kann man irgendwie mittels "s///;" die Kauderwelsch-Zeichen in utf8-Zeichen umwandeln?
Es ist garantiert, dass nur deutsche Umlaute vorkommen.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2005-01-18 20:31
#42753 #42753
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
from_to war die falsche Faehrte in diesem Fall --- versuch mal stattdessen decode:
Code: (dl )
$string = Encode::decode("cp1251", "dein string mit cp1251-zeichen");

$string ist danach intern utf-8-encodiert (oder auch nicht, das braucht dich aber nicht (!) zu interessieren) und Tk muesste es richtig darstellen.
pktm
 2005-01-18 22:58
#42754 #42754
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Cool, wenn ich cp1250 nehme kann ich das Euro-Zeichen endlich Darstellen!!! *freu*
Code: (dl )
1
2
3
4
5
6
my $val = 'äöüߤ';
utf8::encode($val);
$val = Encode::decode("cp1250", "$val");
my $mw = Tk::MainWindow->new();

my $l1 = $mw->Label(-font => $mw->Font(-family=>'Verdana'), -textvariable=>\$val )->pack();


Was jetzt noch an Problemen übrig bleibt ist, dass ich mit der obigen Methode keine Resultate bei der Datenbank erhalte.
Da kann ich noch nicht einmal normale Umlaute darstellen weil ich den Zeichensatz der Datenbank nciht kenne und die Einstellmöglichkeiten im BDE irgendwie keinerlei Wirkung zeigen...

Aber immerhin, ¤ ist da!
thx pktm
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2005-01-19 20:57
#42755 #42755
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Brauchst du hier wirklich utf8::encode?
pktm
 2005-01-20 00:04
#42756 #42756
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Im Testprogramm nicht, wenn ich use uft8; weglasse.
Ansonsten kommt: Wide character in subroutine entry at C:/Perl/lib/Encode.pm line 164.

Aber in meinem eigentlichen Programm kann ich es nicht weglassen, weil ich sonst bei hjedem Timer-Durchlauf neue Kauderwelschzeichen in mein Label reinmurkse. Aus dem nicht codierten Zeichen wird Perl schließlich nicht schlau und macht was neues, noch längeres und noch komischeres draus. Und das, wie gesagt alle paar Sekunden (Timer).
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2005-01-20 01:35
#42757 #42757
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=pktm,17.01.2005, 23:05]Kann man irgendwie mittels "s///;" die Kauderwelsch-Zeichen in utf8-Zeichen umwandeln?
Es ist garantiert, dass nur deutsche Umlaute vorkommen.
mfg pktm[/quote]
Cool, ich zitiere mich selber in der Antwort...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
    my $f_ae = 'õ';
my $f_oe = '÷';
my $f_ue = '³';
my $f_sz = '¯';
$val =~ s/ä/ae/g;
$val =~ s/ü/oe/g;
$val =~ s/ö/ue/g;
$val =~ s/ß/ss/g;
$val =~ s/$f_ae/ae/g;
$val =~ s/$f_oe/oe/g;
$val =~ s/$f_ue/ue/g;
$val =~ s/$f_sz/ss/g;
$val = Encode::encode("iso-8859-1", $val);


Wie ich jetzt allerdings die gefundenen zeichen als Deutschen Umlaut darstelle habe ich ncoh nicht herausgefunden.
Aber hauptsache man kann entdlich, wenn auch nur verwundert, lesen, was da stehen soll.

Also wenn ich den Kerl der diese besch* Paradoxdatenbank mit der BDE-Komponente von Delphi programmiert hat erwische (und das wohl nur weil er zu blöd für SQL war, oder einfach nur blöd), dann ist der kaputt!
Wie kann man nur so ein blödes Datenbanksystem verwenden???
Paradoxdatenbanken geben ohnehin spätestens nach 20.000 Einträgen Ihren Geist auf und vernichten sich selbst (irreparable Schäden nach dem Absturz, man kennt das ja von älteren Warenwirstschaftssystemen).
Man überzeuge sich selbst: http://www.my-next-home.de
Dort unter "Software" (wer hätte es gedacht) steht der ImmoAgent zum Testen bereit.

mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2005-01-03 20:09.