gpt4 book ai didi

python 3.3 : struct. pack 不接受字符串

转载 作者:太空狗 更新时间:2023-10-29 21:29:20 25 4
gpt4 key购买 nike

我正在尝试使用 struct.pack 将填充字符串写入文件,但在 3.x 解释器中这似乎不再有效。我如何使用它的示例:

mystring = anotherString+" sometext here"
output = struct.pack("30s", mystring);

这在早期版本的 python 中似乎没问题,但在 3 中它会产生错误,要求字节对象。文档似乎暗示它应该毫无怨言地将任何字符串转换为 UTF-8 字节对象(而且我不关心多字节字符是否恰好被截断):

http://docs.python.org/release/3.1.5/library/struct.html :“c、s 和 p 转换代码对字节对象进行操作,但使用此类代码打包也支持使用 UTF-8 编码的 str 对象。”

我是否误读了文档以及其他人如何使用带字符串的 struct.pack?

最佳答案

是的,直到 3.1 struct.pack() 错误地将字符串隐式编码为 UTF-8 字节;这是在 Python 3.2 中修复的。参见 issue 10783 .

结论是隐式转换是一个坏主意,并且在开发人员仍然有机会这样做时将其恢复:

I prefer to break the API today than having to maintain a broken API for 10 or 20 years :-) And we have a very small user base using Python 3, it's easier to change it now, than in the next release.

这也记录在 porting section of the 3.2 What's New guide 中:

struct.pack() now only allows bytes for the s string pack code. Formerly, it would accept text arguments and implicitly encode them to bytes using UTF-8. This was problematic because it made assumptions about the correct encoding and because a variable-length encoding can fail when writing to fixed length segment of a structure.

您需要在打包前显式编码您的字符串。

关于python 3.3 : struct. pack 不接受字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218357/

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