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.
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

sonderzeichen codiert als unicode

Beitragvon Silent Bob » Montag 11. Mai 2009, 10:32

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 11. Mai 2009, 10:39

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 Modvoice
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

danke für die schnelle Antwort

Beitragvon Silent Bob » Montag 11. Mai 2009, 11:51

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

Beitragvon sma » Montag 11. Mai 2009, 12:15

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: danke für die schnelle Antwort

Beitragvon Leonidas » Montag 11. Mai 2009, 12:31

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 Modvoice
Silent Bob
User
Beiträge: 3
Registriert: Montag 11. Mai 2009, 10:18

danke leute, es scheint zu funktionieren

Beitragvon Silent Bob » Montag 11. Mai 2009, 13:00

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

Beitragvon BlackJack » Montag 11. Mai 2009, 13:25

@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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder