Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何以二进制模式将字节保存到文件_Python 3.x_Codec - Fatal编程技术网

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

Python 3.x 如何以二进制模式将字节保存到文件,python-3.x,codec,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 = 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)
文件中的数据如下所示:

但我希望正确的格式是这样的,二进制数据中的Unicode:


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

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

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

aa = 'abc\u6df7\u5408def.mp3'.encode('utf-16-be')
有了这些,我相信您的代码的其余部分应该可以像预期的那样工作

磁盘上的Unicode总是被编码的,但是为了正确地读取它,您显然必须知道编码。有时在序列化的Unicode文本文件的开头写入一个可选字符,以帮助读者发现编码;这是一个单一的非打印字符,其唯一目的是帮助消除编码的歧义,特别是其字节顺序(大端和小端)


然而,许多地方正在标准化UTF-8,它不需要BOM。编码本身是面向字节的,因此不受字节顺序问题的影响。也许还可以参见

第一步,我们可以将aa转换为bb=b'abc\\xf7\\x6d\\x08\\x54def.mp3',然后是datafile.write(bb)。但如何做到这一点呢?你的投入并不是你所希望的。似乎希望
aa='abc\u6df7\u5408def.mpi'.encode('utf-8')
初始化字节字符串。字节字符串
b\\u'
只是
b'\\'
(反斜杠)后跟
b'u'
(带小写字母的字节字符串
u
)。将aa更改为aa=b'abc\u6df7\u5408def.mp3',问题仍然存在。不,字节字符串中的
\u
定义不明确。如果您想要Unicode字符串的UTF-8编码,您必须这么说。实际上,您似乎想要
UTF-16be
,但其余部分仍然适用。