如何将字节保存为二进制模式的文件

时间:2018-12-04 07:06:34

标签: python-3.x codec

我有一个类似字节的对象,类似:

aa = b'abc\u6df7\u5408def.mp3'

我想以二进制模式将其保存到文件中。代码在下面,但效果不佳

if __name__=="__main__":
    aa = b'abc\u6df7\u5408def.mp3'
    print(aa.decode('unicode-escape'))

    with open('database.bin', "wb") as datafile:
        datafile.write(aa)

文件中的数据是这样的:

enter image description here

但是我想要正确的格式是这样,二进制数据中的unicodes:

enter image description here

如何转换字节以将其保存在文件中?

1 个答案:

答案 0 :(得分:0)

\uNNNN转义在字节字符串中没有意义,因为它们未指定字节序列。 Unicode代码点从概念上讲是字符串的抽象表示形式,并且不能直接映射到序列化格式(由字节组成,或者从原则上讲,是任何其他形式的具体符号表示形式)。

个定义明确的Unicode序列化格式;这些被称为“编码”。您似乎正在寻找这些字符的UTF-16大端编码。

aa = 'abc\u6df7\u5408def.mp3'.encode('utf-16-be')

通过这种方式,我相信您的其余代码应能按预期工作。

磁盘上的

Unicode始终是 编码的,但是显然您必须知道编码才能正确读取。可选的byte-order mark (BOM)有时会写入序列化Unicode文本文件的开头,以帮助读者发现编码。这是一个非印刷字符,其唯一目的是帮助消除编码歧义,尤其是消除其字节顺序(big-endian与little-endian)。

但是,很多地方都在不需要BOM的UTF-8上进行标准化。编码本身是面向字节的,因此不受字节顺序问题的影响。也许也请参见https://utf8everywhere.org/