同じ内容の "你"(英語ではyou
)の3つの異なる形式 - gbk \ utf-8 \ ucs-2のgeditと "ok1、ok2、ok3" "ないで、(またはUnicodeを言う)ユニコードエンディアンは私に戸惑う
>>> 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' ですが、次の出力は私だけUCS-2でエンディアンの問題がある理由
>>> '\xe4\xbd\xa0'.decode("utf-8")
u'\u4f60'
>>> '\xc4\xe3'.decode("gbk")
u'\u4f60'
>>>
を混同しましたutf-8、gbkではなく?
メモリアラインメントの最下位バイトの前に最下位バイトを配置するため、シーケンス( '0x60'、 '0x4F')がファイルに格納されます。したがって、ファイルの読み込みでは、この順序でバイトが返されます。私のマシンでは、f1は '\ xe3 \ xc4 \ n'ではありませんか? f2はf2 '\ xbd \ xe4 \ xa0 \ n'ではありません –
@Dd Pp:utf-8ファイルを書くとき、geditはバイト*を1つずつ*入れます。しかし、ucs-2コードファイルを書くとき、geditはバイトを2 * 2 *にします。バイト内の順序は、後者の場合のみエンディアンに依存します。 –