[gelöst] python unicode
-
- Beiträge: 269
- Registriert: 01.10.2005 16:45:42
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Winterthur, selten auch Eisenach
[gelöst] python unicode
Hallo zusammen,
ich beschäftige mich mit python und hab da so ein unicode-problem. Evtl. kennt sich ja hier im Forum jemand aus. Ich bekomme von einem anderen Programm strings in der Form von Eckst\\u00fctze übergeben und möchte diese als Eckstütze ausdrucken. Folgend meine Versuche.
hugo@weide:~/$ python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> s = "Eckst\u00fctze"
>>> s
'Eckst\\u00fctze'
>>> print(s)
>>> Eckst\u00fctze
>>> type(s)
<type 'str'>
>>>
Es ist ja prinzipiell möglich Umaute zu drucken, zum Vergleich:
>>>
>>> u = u"Eckst\u00fctze"
>>> u
>>> u'Eckst\xfctze'
>>> print(u)
>>> Eckstütze
>>> type(u)
<type 'unicode'>
>>>
Folgend mein fehlgeschlagener Versuch
>>> t = unicode(s)
>>> t
u'Eckst\\u00fctze'
>>> print t
Eckst\u00fctze
>>> type(t)
<type 'unicode'>
>>>
gruss bernd
ich beschäftige mich mit python und hab da so ein unicode-problem. Evtl. kennt sich ja hier im Forum jemand aus. Ich bekomme von einem anderen Programm strings in der Form von Eckst\\u00fctze übergeben und möchte diese als Eckstütze ausdrucken. Folgend meine Versuche.
hugo@weide:~/$ python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> s = "Eckst\u00fctze"
>>> s
'Eckst\\u00fctze'
>>> print(s)
>>> Eckst\u00fctze
>>> type(s)
<type 'str'>
>>>
Es ist ja prinzipiell möglich Umaute zu drucken, zum Vergleich:
>>>
>>> u = u"Eckst\u00fctze"
>>> u
>>> u'Eckst\xfctze'
>>> print(u)
>>> Eckstütze
>>> type(u)
<type 'unicode'>
>>>
Folgend mein fehlgeschlagener Versuch
>>> t = unicode(s)
>>> t
u'Eckst\\u00fctze'
>>> print t
Eckst\u00fctze
>>> type(t)
<type 'unicode'>
>>>
gruss bernd
Zuletzt geändert von wartburgritter am 20.09.2013 19:29:55, insgesamt 1-mal geändert.
Stand März 2020:
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Re: python unicode
Code: Alles auswählen
>>> s = u'Eckst\u00fctze'
>>> s
u'Eckst\xfctze'
>>> print s
Eckstütze
>>> t = unicode(s)
>>> t
u'Eckst\xfctze'
>>> print t
Eckstütze
>>>
Wobei, kann nicht recht sein, da beschwert sich der Interpreter:
Code: Alles auswählen
$ LC_ALL=c python
[...]
>>> print u'te\u00fcst'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 2: ordinal not in range(128)
>>>
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
- Beiträge: 269
- Registriert: 01.10.2005 16:45:42
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Winterthur, selten auch Eisenach
Re: python unicode
Aha, es könnte auch am Terminal liegen, daran habe ich nochgar nicht gedacht, aber meins ist utf-8. Die variable des typs u'string' wird ja korrekt gedruckt, nur eben der std-string mit den encodings nicht.
gruss bernd
Code: Alles auswählen
hugo@weide:~$
hugo@weide:~$ locale
LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
hugo@weide:~$
hugo@weide:~$ env | grep 'LC'
hugo@weide:~$
hugo@weide:~$
hugo@weide:~$ LC_ALL=c python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> print u'te\u00fcst'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 2: ordinal not in range(128)
>>>
Stand März 2020:
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
- JaKlaRo
- Beiträge: 121
- Registriert: 06.03.2008 15:00:00
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: python unicode
Hallo,
das Problem ist, dass ein Rawstring übergeben wird. Mit dem folgendem Code läßt sich Dein Problem lösen.
Gruß
JaKlaRo
das Problem ist, dass ein Rawstring übergeben wird. Mit dem folgendem Code läßt sich Dein Problem lösen.
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8 -*-
def str_to_utf8(s):
if '\\u00c4' in s:
s = s.replace("\\u00c4", "Ä")
if '\\u00e4' in s:
s = s.replace("\\u00e4", "ä")
if '\\u00d6' in s:
s = s.replace("\\u00d6", "Ö")
if '\\u00f6' in s:
s= s.replace("\\u00f6", "ö")
if '\\u00dc' in s:
s = s.replace("\\u00dc", "Ü")
if '\\u00fc' in s:
s = s.replace("\\u00fc", "ü")
if '\\u00df' in s:
s = s.replace("\\u00df", "ß")
return s
def main():
s = "Eckst\u00fctze Eckst\u00fctze B\u00e4r"
print s
u=str_to_utf8(s)
print u
if __name__=="__main__":
main()
JaKlaRo
Re: python unicode
Und das dann für jeden Codepoint oder wie? Nach kurzem startpagen doch eher so:
Edit: Der Vollständigkeit halber, so geht's auch:
Code: Alles auswählen
>>> s = "Eckst\u00fctze Eckst\u00fctze B\u00e4r"
>>> print s
Eckst\u00fctze Eckst\u00fctze B\u00e4r
>>> s.decode ('unicode-escape')
u'Eckst\xfctze Eckst\xfctze B\xe4r'
>>> print s.decode ('unicode-escape')
Eckstütze Eckstütze Bär
Code: Alles auswählen
>>> s = "Eckst\u00fctze Eckst\u00fctze B\u00e4r"
>>> print unicode (s, 'unicode-escape')
Eckstütze Eckstütze Bär
-
- Beiträge: 269
- Registriert: 01.10.2005 16:45:42
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Winterthur, selten auch Eisenach
Re: python unicode
Genau das hab ich verzweifelt gesuchtgoeb hat geschrieben:...
>>> s.decode ('unicode-escape')
...
[/code]
Vielen vielen Dank Euch allen für die Unterstützung
Bernd alias der wartburgritter
Stand März 2020:
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Re: [gelöst] python unicode
Man kann das entweder wissen oder auch per dir(s) gucken, was es im Objekt so alles gibt. Da waere der .decode()-Eintrag gelistet werden, wobei man ihn wohl eher nicht als zustaendig erkannt haette. Generell kann man mit dieser Methode nach sprechenden Bezeichnern suchen und gucken, ob sie weiterhelfen.
Gruss Cae
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
- Beiträge: 269
- Registriert: 01.10.2005 16:45:42
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Winterthur, selten auch Eisenach
Re: [gelöst] python unicode
[quote="Cae"]Man kann das entweder wissen oder auch per dir(s) gucken, was es im Objekt so alles gibt. .../quote]
Aha, das dir ist auch auf Variablen anwendbar, naja macht sinn. Ich gab es bisher immer nur für funktionen aus modulen verwendet. Aber naklar, wieder was gelernt. Decodierung meiner Umlaute funktioniert übrigends bestens ...
Bernd
Aha, das dir ist auch auf Variablen anwendbar, naja macht sinn. Ich gab es bisher immer nur für funktionen aus modulen verwendet. Aber naklar, wieder was gelernt. Decodierung meiner Umlaute funktioniert übrigends bestens ...
Bernd
Stand März 2020:
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch
Desktop Lenovo ThinkPad X1 mit Debian Buster (super kiste, aber der akku macht nach nunmehr 3 Jahren schlapp)
Fileserver veralte hardware mit neuer grosser hd mit Debian Lenny (ich sollte den wirklich mal ersetzen ... )
Mobiltelefon Sony Xperia mit SailfishOS
Tablet BQ aquaris M10 mit Ubuntu Touch