Seite 1 von 1

sonderzeichen codiert als unicode

Verfasst: Montag 11. Mai 2009, 10:32
von Silent Bob
Hallo,

Ich habe das Eurozeichen als unicode codiert.
Funktioniert prima bei einer Ausgabe.
_euroAlsZeichen = u"\u20AC"

Jetzt brauche ich die unicode codierung für einen längeren Strich.
Das ist nicht der normale Bindestrich sondern ein etwas längerer
Strich. Ich muss den Frankenstrich der schweizer Währung zu einem Preis ausgeben. z.B. 150.- (dieser Strich sollte länger sein)

In allen Windows programmen bekommt man ihn wenn man
Alt + 0150 auf nummernblock eintippt. (ASCII dez 150)
Funktioniert "nur" auf einem richtigen nummenblock nicht auf laptop tastatur.

Danke im Vorraus

Silent Bob

Verfasst: Montag 11. Mai 2009, 10:39
von Leonidas
Hallo Silent Bob, willkommen im Forum,

Such dir einen aus. ``FIGURE DASH`` klingt gar nicht schlecht:

Code: Alles auswählen

print u"""\N{HYPHEN}
\N{NON-BREAKING HYPHEN}
\N{FIGURE DASH}
\N{EN DASH}
\N{EM DASH}
\N{HORIZONTAL BAR}"""
Hint: ASCII 150 Dezimal gibt es nicht, weil ASCII nur von 0-127 geht. Somit ist das kein ASCII-Zeichen sondern ist wohl aus deiner Codepage.

danke für die schnelle Antwort

Verfasst: Montag 11. Mai 2009, 11:51
von Silent Bob
nur leider funktioniertst so nicht oder ich hab was falsch verstanden.

auf der python-konsole:

_frankenstrich = u"\N{HYPHEN}"
print _frankenstrich

...UnicodeEncodeError: 'charmap' codec can´t encode character u'\u2010' in position 0: character maps to <undefined>

bei _frankenstrich = u"""\N{HYPHEN}"""
kommt der gleiche Fehler.

Muss ich noch was einstellen oder hab ich was falsch geschrieben?

Verfasst: Montag 11. Mai 2009, 12:15
von sma
Unter der Annahme, dass Silent Bob das Encoding CP 1252 benutzt (ASCII ist es auf keinen Fall, wie Leonidas richtig sagte), ist das Zeichen mit der Zahl 150 der EN DASH, –, Unicode U+2013. Also sollte ein u"150,\u2013" die Lösung sein.

Stefan

Re: danke für die schnelle Antwort

Verfasst: Montag 11. Mai 2009, 12:31
von Leonidas
Silent Bob hat geschrieben:n...UnicodeEncodeError: 'charmap' codec can´t encode character u'\u2010' in position 0: character maps to <undefined>
Dann solltest du

Code: Alles auswählen

print _frankenstrich.encode('das_encoding_deiner_konsole')
machen,

Und was hat es mit deinen komischen Unterstrichen auf sich?

danke leute, es scheint zu funktionieren

Verfasst: Montag 11. Mai 2009, 13:00
von Silent Bob
funktioniert jetzt in meinem Pythonscript
welches die codierung # -*- coding: latin1 hat.

wie sma geschrieben hat:
x = u"\u2013"

Nur auf der Konsole kanns nicht ausgegeben werden,
sprich print x geht nicht.

print x ergibt folgende Meldung:
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 0: ordinal not in range(256)

Wenn ich die variable x mit einem anderen String verkette klappts.
Ich benutzte den String als Text innerhalb eines Adobe InDesignDokuments. Hier wird der länger Strich exakt angezeigt.

auf der pyhton-konsole funkts also leider nicht aber da muss man sicher noch ein encoding oder so einstellen.

@sma: woher hast du das gewusst? Hast du eine Tabelle mit allen Werten?

Verfasst: Montag 11. Mai 2009, 13:25
von BlackJack
@Silent Bob: Ich weiss nicht woher sma es gewusst hat, aber 'cp1252' ist die Standardkodierung für Windows in Westeuropa, also kann man das ganz einfach ausprobieren was da herauskommt, wenn man den Bytewert 150 als cp1252 dekodiert, oder alternativ auch die Vorschläge von Leonidas als cp1252 kodieren und schauen wo der Bytewert 150 heraus kommt.