python 2.7 vs 3编码-解码字节字符串

python 2.7 vs 3编码-解码字节字符串,python,python-3.x,python-2.7,decode,encode,Python,Python 3.x,Python 2.7,Decode,Encode,以下代码在Python2.7中运行良好 with open(file_path) as ff: content = ff.read() image_bytes_b64=base64.b64encode(content) function(image_bytes_b64) 当我在Python3.6中运行它时,它会给我各种各样的错误。您知道在Python3.6中上述代码的等价物是什么吗文件路径是指向PNG图像的路径。以二进制模式打开文件,它应该可以工作: with open(file_pa

以下代码在Python2.7中运行良好

with open(file_path) as ff:
    content = ff.read()
image_bytes_b64=base64.b64encode(content)
function(image_bytes_b64)

当我在Python3.6中运行它时,它会给我各种各样的错误。您知道在Python3.6中上述代码的等价物是什么吗<代码>文件路径是指向PNG图像的路径。

以二进制模式打开文件,它应该可以工作:

with open(file_path, 'rb') as ff:
    content = ff.read()
image_bytes_b64=base64.b64encode(content)
function(image_bytes_b64)

以二进制模式打开该文件,则该文件应能正常工作:

with open(file_path, 'rb') as ff:
    content = ff.read()
image_bytes_b64=base64.b64encode(content)
function(image_bytes_b64)
open(文件路径'rb')

试着用rb打开文件,模式后附加“b”以二进制模式打开文件,因此也有类似“rb”、“wb”和“r+b”的模式。Windows上的Python区分了文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动轻微更改。这种对文件数据的幕后修改对于ASCII文本文件来说很好,但它会破坏JPEG或EXE文件中的二进制数据。在读取和写入此类文件时,请非常小心地使用二进制模式。在Unix上,在模式中附加一个“b”并没有什么坏处,因此您可以在所有二进制文件中独立使用it平台

--编辑--

需要再做一次更改
image\u bytes\u b64=base64.b64encode(content.decode()

谢谢你指出这一点

为了支持原生Python 2字符串,较旧的Django版本必须同时接受ByTestRing和unicode字符串。现在,Python2支持已被放弃,ByTestRing应该只在输入/输出边界附近出现(例如,处理二进制字段或HTTP流)

对于bytestring,这将创建一个带有不需要的b前缀和附加引号的字符串(str(b'foo')是“b'foo'))。要进行调整,请在传递bytestring之前调用decode()。

打开(文件路径“rb”)

试着用rb打开文件,模式后附加“b”以二进制模式打开文件,因此也有类似“rb”、“wb”和“r+b”的模式。Windows上的Python区分了文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动轻微更改。这种对文件数据的幕后修改对于ASCII文本文件来说很好,但它会破坏JPEG或EXE文件中的二进制数据。在读取和写入此类文件时,请非常小心地使用二进制模式。在Unix上,在模式中附加一个“b”并没有什么坏处,因此您可以在所有二进制文件中独立使用it平台

--编辑--

需要再做一次更改
image\u bytes\u b64=base64.b64encode(content.decode()

谢谢你指出这一点

为了支持原生Python 2字符串,较旧的Django版本必须同时接受ByTestRing和unicode字符串。现在,Python2支持已被放弃,ByTestRing应该只在输入/输出边界附近出现(例如,处理二进制字段或HTTP流)


对于bytestring,这将创建一个带有不需要的b前缀和附加引号的字符串(str(b'foo')是“b'foo'))。要进行调整,请在传递bytestring之前调用decode()。

open(file\u path,'rb')open(file\u path,'rb')还需要一个更改:
image\u bytes\u b64=base64.b64encode(content).decode()。请添加到您的答案中。@user2725109,但我不会调用变量
image\u bytes
,因为它不再包含字节,而是包含文本(
str
)。还需要一个更改:
image\u bytes\u b64=base64.b64encode(content.decode()
)。请添加到您的答案中。@user2725109但我不会调用变量
image\u bytes
,因为它不再包含字节,而是包含文本(
str
)。。。