如何将字节以二进制模式保存到文件
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/
我有一个类似字节的对象:
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/