sonderzeichen codiert als unicode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

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?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

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?
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.
Antworten