dev  

Re: [ot:dev] Re: Encoding-Problem

Stefan Meretz
Thu, 16 Nov 2006 08:20:25 -0800

On 2006-11-16 11:35, Thomas Kalka wrote:
> Das ganze ist leider noch nicht ganz transparent,
> da ja auch noch das Terminal interpretiert.
> Was kommt raus, wenn Du den MySQL-Output durch hexdump  schickst ?

Folgender Test (Python console):

>>> import codecs
>>> oe = unicode('ö', 'utf8')
>>> f = codecs.open('utf8file.txt', 'w', 'utf-8')
>>> f.write(oe)
>>> f.close()
>>> print oe
ö
>>> oe
u'xf6'

Linux console:

hexdump -C utf8file.txt
00000000  c3 b6                                             |..|
00000002

Irgendwie war das doch zu erwarten, oder? Wenn das "print" richtig 
interpretiert wird, dann auch das file.write. Erklären kann ich es aber 
nicht.

Ok, noch folgender Test:

>>> oe1 = u'xf6'
>>> oe2 = u'xc3xb6'
>>> print oe1, oe2
ö ö
>>> oe1.encode('utf8')
'xc3xb6'
>>> oe2.encode('utf8')
'xc3x83xc2xb6'
>>> print oe1.encode('utf8'), oe2.encode('utf8')
ö ö
>>> print oe1.encode('latin1'), oe2.encode('latin1')
�ö

Erklärung willkommen:-)

> Eigentlich müsste M2 nicht öööö anzeigen sondern noch die
> zusätzlichen Escape-Codes.

Was ist M2?

> Hast Du beim Terminalprogramm für M2 ISO8... eingestellt oder utf8 ?

utf8 ist default bei Ubuntu.

> Soweit ich bisher verstehe, sind Unicode-Strings in Python so
> kodiert, das sie sagen, was Kodiert werden soll, nicht das Ergebnis.
>
> u'xc3xb6xc3xb6xc3xb6xc3xb6' kann nicht "öööö" ergeben.

So geht's (siehe oben):

>>> print u'xc3xb6xc3xb6xc3xb6xc3xb6'.encode('latin1')
öööö

mysql> select hex('ö');
+-----------+
| hex('ö') |
+-----------+
| C3B6      |
+-----------+

> Das das beim print-Statement trotzdem erscheint muss irgendwie
> am weiteren Transcoding  auf dem Weg von Python über die Console
> übers Terminal zu deinen Augen geschehen.

Da fehlt noch ein Weg, an dem es vielleicht hängt:
Der von den Augen ins Hirn;-)

Ich kann im Moment auch nicht sonderlich gut nachdenken, weil eine 
Erkältung im Anflug ist. Eventuell falle ich ein paar Tage aus, weil 
flach. Also nicht wundern, wenn meine Antworten dauern...

Ciao,
Stefan

-- 
Start here: www.meretz.de