Ich bearbeite drei Dateien, die gleichen Inhalt haben "你" (ist you
in Englisch) in drei verschiedenen Formen - gbk \ utf-8 \ ucs-2 mit gedit namens "ok1, ok2, ok3 ".Unicode Endian verwirrt mich
>>> f1 = open('ok1', 'rb').read()
>>> f2 = open('ok2', 'rb').read()
>>> f3 = open('ok3', 'rb').read()
>>> f1
'\xc4\xe3\n'
>>> f2
'\xe4\xbd\xa0\n'
>>> f3
'`O\n\x00'
>>> hex(ord("`"))
'0x60'
>>> hex(ord("O"))
'0x4f'
in der Tat f3 '\ x60 \ x4f', aber die folgende Ausgabe verwirrt mich
>>> '\xe4\xbd\xa0'.decode("utf-8")
u'\u4f60'
>>> '\xc4\xe3'.decode("gbk")
u'\u4f60'
>>>
, warum es nur Endian-Problem in UCS-2 (oder sagen Unicode) ist, nicht in utf-8, nicht in gbk?
Da Ihr Computer das niedrigstwertige Byte vor dem höchstwertigen Byte in die Speicherausrichtung einfügt, wurde die Sequenz ('0x60', '0x4F') in die Datei geschrieben. Die Datei liest also die Bytes in dieser Reihenfolge. Warum ist f1 in meiner Maschine nicht '\ xe3 \ xc4 \ n' ?? f2 ist nicht f2 '\ xbd \ xe4 \ xa0 \ n' –
@Dd Pp: Weil gedit beim Schreiben einer utf-8-Datei Bytes * eins nach dem anderen * schreibt. Beim Schreiben einer codierten Datei mit ucs-2 werden jedoch die Bytes * zwei mal zwei * eingegeben. Die Reihenfolge innerhalb von Bytes hängt nur im letzteren Fall von der Endianz ab. –