Schrift
[thread]10360[/thread]

Beliebigen Codepoint umwandeln

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
mustermann
 2007-09-10 17:37
#99270 #99270
User since
2007-09-10
12 Artikel
BenutzerIn
[default_avatar]
Hallo,

gibt es in Perl eine Funktion, die mir einen beliebigen Codepoint in z.b. UTF8 umwandelt?

Gruß

mustermann
nepos
 2007-09-10 18:07
#99272 #99272
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was ist bitte ein Codepoint?
Ansonsten würde ich sagen, das Modul CPAN:Encode kann diverse Konvertierungen von Zeichensätzen, wenn das das ist, was du suchst.
ptk
 2007-09-10 18:29
#99274 #99274
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Code: (dl )
Encode::encode("utf-8", "\x{XXXX}")
, wobei XXXX für den hexkodierten Codepoint steht. Alternativ kann man einen Character aus einem Codepoint mit chr(...) erstellen.

Ein Codepoint ist einfach die Ganzzahlkodierung für ein Unicode-Zeichen. Das Zeichen "A" hat z.B. den Codepoint 65 (der mehr oder weniger zufällig dem Bytewert des Zeichens bei ASCII oder ISO-8859-1 entspricht), das Zeichen "Ä" den Codepoint 196 (zufällig gleich dem Bytewert bei ISO-8859-1) oder das Zeichen "€" (Euro sign, kann dieses Forum noch nicht so richtig) den Codepoint 0x20ac.
mustermann
 2007-09-10 18:38
#99277 #99277
User since
2007-09-10
12 Artikel
BenutzerIn
[default_avatar]
Hallo,

danke für die Antworten, aber ich habe die Frage wohl falsch gestellt, was ich wissen muss ist, wie bekommen ich aus dem Unicode den Codepoint?

Gruß
#Kein Kommentar
 2007-09-10 18:41
#99278 #99278
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
das gegenteil von chr (..) ist ord (..)
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Taulmarill
 2007-09-10 20:35
#99283 #99283
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Vom Codepoint zu UTF-8 und wieder zurück ;-)
Code (perl): (dl )
1
2
3
4
5
6
use Encode;

my $foo = Encode::encode( "UTF-8", "\x{306E}" );
print unpack( "H*", $foo ) . "\n";
Encode::from_to( $foo, "UTF-8", "UCS-2BE" );
print unpack( "H*", $foo ) . "\n";
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2007-09-11 00:22
#99296 #99296
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Unicode ist Codepoint. Oder was meinst du genau? Möchtest du beispielsweise "LATIN CAPITAL LETTER A" nach U+0041 wandeln? Oder meinst du in Wirklichkeit UCS-2 btw. UTF-16, wenn du "Unicode" schreibst?
moritz
 2007-09-11 11:16
#99302 #99302
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Also wenn du mit Encode::decode ein Zeichen in Perls internes Format umwandelst, bekommst du mit ord() den Codepoint.

Perl 6 kann übrigens transparent zwischen den verschiedenen Leveln (Bytes, Code Points, Grapheme, CharLingua) umschalten (wenn es mal fertig ist...).
mustermann
 2007-09-11 12:30
#99305 #99305
User since
2007-09-10
12 Artikel
BenutzerIn
[default_avatar]
Hallo,

also das was ich brauche hat Taulmarill geschrieben, vielen Dank! Jetzt habe ich nur noch das Problem, dass ich anstatt eines fixen hex-Werts eine Variable als Parameter verwenden möchte, so in etwa:

Code (perl): (dl )
1
2
3
4
5
6
use encode; 

print "hallo\n";
$i = hex(223);
$foo = Encode::encode( "UTF-8", "\x{$i}" );
print unpack( "H*", $foo ) . "\n";


Und das klappt dann nicht mehr. Könnt ihr mir da helfen?

Gruß
moritz
 2007-09-11 13:04
#99312 #99312
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Nimm doch einfach chr.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-09-10 17:37.