我正在尝试使用struct.pack将填充的字符串写入文件,但似乎3.x解释器这不再起作用了.我如何使用它的一个例子:
mystring = anotherString+" sometext here"
output = struct.pack("30s", mystring);
Run Code Online (Sandbox Code Playgroud)
这在早期版本的python中似乎没问题,但是对于3,它会产生一个要求字节对象的错误.文档似乎暗示它应该将任何字符串转换为UTF-8字节对象而没有抱怨(我不关心多字节字符是否恰好被截断):
http://docs.python.org/release/3.1.5/library/struct.html: "的C,S和P转换码对字节对象进行操作,但用这样的代码包装还支持STR对象,这是使用编码UTF-8".
我是否误读了文档以及其他人如何使用带有字符串的struct.pack?
Mar*_*ers 10
是的,直到3.1 struct.pack()
错误地将字符串隐式编码为UTF-8字节; 这是在Python 3.2中修复的.见问题10783.
结论是隐式转换是一个坏主意,并且在开发人员仍然有机会这样做时它被还原:
我今天打算破解API而不是维持一个破坏的API 10年或者20年:-)而且我们使用Python 3的用户群非常小,现在更容易更改,而不是下一个版本.
struct.pack()
现在只允许s
字符串包的代码.以前,它会接受文本参数,并使用UTF-8将它们隐式编码为字节.这是有问题的,因为它对正确的编码做出了假设,并且因为当写入结构的固定长度段时,可变长度编码可能会失败.
您需要在打包前对字符串进行显式编码.
归档时间: |
|
查看次数: |
6434 次 |
最近记录: |