我編輯了三個文件,它們有三個不同的形式 - 「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會將字節*兩乘二*。字節內的順序僅在後一種情況下依賴於字節順序。 –