如何将字节以二进制模式保存到文件

How to save bytes to file as binary mode

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

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

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

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

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

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

除此之外,我相信您的其余代码应该可以按预期工作。

磁盘上的 Unicode 总是 编码,但您显然必须知道编码才能正确读取它。可选的 byte-order mark (BOM) 有时会写入序列化 Unicode 文本文件的开头,以帮助 reader 发现编码;这是一个单一的非打印字符,其唯一目的是帮助消除编码歧义,特别是它的字节顺序(big-endian vs little-endian)。

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