我编辑了三个文件,它们有三个不同的形式 - “gbk \ utf-8 \ ucs-2”,其中gedit命名为“ok1,ok2,ok3”,它有相同的内容“你”(英文为you
) ”。unicode endian困惑我
>>> 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'
其实f3是 '\ X60 \ x4f', 但下面的输出困惑我
>>> '\xe4\xbd\xa0'.decode("utf-8")
u'\u4f60'
>>> '\xc4\xe3'.decode("gbk")
u'\u4f60'
>>>
为什么只出现在UCS-2端的问题(或者说Unicode)的,而不是在utf-8,不在gbk中?
由于您的机器在内存对齐中的最重要字节之前放置了最低有效字节,所以序列('0x60','0x4F')已被放入文件中。因此,文件读取将按此顺序产生字节。为什么在我的机器中,f1不是'\ xe3 \ xc4 \ n'? f2不是f2'\ xbd \ xe4 \ xa0 \ n' –
@Dd Pp:因为编写utf-8文件时,gedit会将字节*逐个*。但是,在编写ucs-2编码文件时,gedit会将字节*两乘二*。字节内的顺序仅在后一种情况下依赖于字节顺序。 –