gpt4 book ai didi

python - 编码 : TypeError: write() argument must be str, 不是字节

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:46 25 4
gpt4 key购买 nike

我对 python 有初步的了解,但不清楚如何处理二进制编码问题。我正在尝试从 firefox-webextensions 示例运行示例代码,其中 python 脚本发送由 javascript 程序读取的文本。我一直遇到编码错误。

python代码是:

#! /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
import sys, json, struct

text = "pong"

encodedContent = json.dumps(text)
encodedLength = struct.pack('@I', len(encodedContent))
encodedMessage = {'length': encodedLength, 'content': encodedContent}

sys.stdout.write(encodedMessage['length'])
sys.stdout.write(encodedMessage['content'])

错误跟踪(显示在 firefox 控制台中)是:

stderr output from native app chatX: Traceback (most recent call last):
stderr output from native app chatX: File "/Users/inchem/Documents/firefox addons/py/chatX.py", line 10, in <module>
stderr output from native app chatX: sys.stdout.write(encodedMessage['length'])
stderr output from native app chatX: TypeError: write() argument must be str, not bytes

在 OS X El Capitan 10.11.6、x86 64 位 cpu 上运行 python 3.5.1; firefox 开发者版 52.0

我使用的python脚本,如上图,是从原来的最小化的 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging

我也试过:

sys.stdout.buffer.write(encodedMessage['length'])
sys.stdout.buffer.write(encodedMessage['content'])

生成:

stderr output from native app chatX: sys.stdout.buffer.write(encodedMessage['content'])
stderr output from native app chatX: TypeError: a bytes-like object is required, not 'str'

最佳答案

该示例可能与 Python 2 兼容,但在 Python 3 中情况发生了变化。

您正在生成长度的二进制表示形式为字节:

encodedLength = struct.pack('@I', len(encodedContent))

不可打印。您可以通过作为二进制流的套接字流写入它,但不能通过作为文本流的 stdout 写入。

使用 buffer 的技巧(如 How to write binary data in stdout in python 3? 中所述)很好,但仅适用于二进制部分(请注意,您现在收到文本部分的错误消息):

sys.stdout.buffer.write(encodedMessage['length'])

对于文本部分,只需写入stdout:

sys.stdout.write(encodedMessage['content'])

或使用 sys.stdout.buffer 将字符串转换为字节:

sys.stdout.buffer.write(bytes(encodedMessage['content'],"utf-8"))

关于python - 编码 : TypeError: write() argument must be str, 不是字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com