我正在尝试打开一个gif文件,并将其字节正确发送到webbrowser,但它会抛出异常'无法将'字节'对象转换为str隐式'并且坦率地说我感到困惑,因为我已将它转换为字符串
files=open("WebContent/"+fileName,"rb")
#size=os.path.getsize("WebContent/"+fileName)
text=str(files.read())
text=text.encode('UTF-8')
defaultResponseCode="HTTP/1.1 200 OK\r\nContent-Type: image/gif\r\nContent-Transfer-Encoding: binary\r\nContent-Length: 29696\r\n\r\n"+text
提前致谢!
答案 0 :(得分:1)
在这里,您尝试将字节(使用'rb'
模式打开的文件)转换为字符串:
text = str(files.read())
将上述行更改为:
text = files.read().decode(encoding='change_to_source_file_encoding')
然后你可以使用:
将unicode字符串转换为utf-8字节字符串text = text.encode('UTF-8')
如果源编码是utf-8,您只需将files.read()
中的字节字符串传递给结果字符串,而无需无意义的解码/编码步骤(从utf-8字节到字符串再到utf-8字节)。 ..
更新:尝试使用requests
url = 'url'
files = {'file': open("WebContent/"+fileName, 'rb')}
response = requests.post(url, files=files)
更新2:
根据响应标题中的内容类型(... Content-Type: image/gif ...
),您有 files.read()
之后所需格式的数据。编码/解码<!/强>
答案 1 :(得分:0)
对于那些主要对Popen而不是psql感兴趣的人来说,这是一个基于原始Popen问题的调试工作python3脚本,并包含提供的建议。
#!/usr/bin/env python3
# print a list of postgresql databases via psql
import subprocess
username = "postgres"
dbname = "postgres"
p = subprocess.Popen(
args = ['psql', '-qAt', '-U', username, '-d', dbname],
# args = ['psql', '-qAt', '-d', dbname], # with adequate user permissions
stdin = subprocess.PIPE,
stdout = subprocess.PIPE
)
sql = b"SELECT datname FROM pg_database;"
dbs = p.communicate(b"SELECT datname FROM pg_database;")[0].split(b'\n')
for db in dbs:
print("%s" % db.decode("utf-8"))
p.wait()
答案 2 :(得分:0)
在python 3+中我遇到了类似的问题,我删除了text.encode("utf-8")
并使用了text.strip()
。
text = text.strip()